home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the 3D Game Programming Gurus / gurus.iso / DirectX / dx9sdkcp.exe / SDK (C++) / Include / dplay.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-12-04  |  85.4 KB  |  2,155 lines

  1. /*==========================================================================;
  2.  *
  3.  *  Copyright (C) 1994-1997 Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:       dplay.h
  6.  *  Content:    DirectPlay include file
  7.  *
  8.  ***************************************************************************/
  9.  
  10. #ifndef __DPLAY_INCLUDED__
  11. #define __DPLAY_INCLUDED__
  12.  
  13. #include <ole2.h>       // for DECLARE_INTERFACE and HRESULT
  14.  
  15. /* avoid warnings in MSVC at Level4 */
  16. #if _MSC_VER >= 1200
  17. #pragma warning(push)
  18. #endif
  19. #pragma warning(disable:4201)
  20.  
  21.  
  22. /*
  23.  * Some types
  24.  */
  25.  
  26. #ifndef _WIN64
  27. #define DWORD_PTR DWORD
  28. #endif
  29.  
  30. typedef LPVOID (*LPRGLPVOID)[];
  31. typedef LPRGLPVOID PRGPVOID, LPRGPVOID, PRGLPVOID, PAPVOID, LPAPVOID, PALPVOID, LPALPVOID;
  32.  
  33. #define VOL volatile
  34. typedef VOID *VOL LPVOIDV;
  35.  
  36.  
  37. #define _FACDP  0x877
  38. #define MAKE_DPHRESULT( code )    MAKE_HRESULT( 1, _FACDP, code )
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. /*
  45.  * GUIDS used by DirectPlay objects
  46.  */
  47. DEFINE_GUID(IID_IDirectPlay2, 0x2b74f7c0, 0x9154, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
  48. DEFINE_GUID(IID_IDirectPlay2A,0x9d460580, 0xa822, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
  49.  
  50. DEFINE_GUID(IID_IDirectPlay3, 0x133efe40, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
  51. DEFINE_GUID(IID_IDirectPlay3A,0x133efe41, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
  52.  
  53. DEFINE_GUID(IID_IDirectPlay4, 0xab1c530, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
  54. DEFINE_GUID(IID_IDirectPlay4A,0xab1c531, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
  55.  
  56. // {D1EB6D20-8923-11d0-9D97-00A0C90A43CB}
  57. DEFINE_GUID(CLSID_DirectPlay,0xd1eb6d20, 0x8923, 0x11d0, 0x9d, 0x97, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
  58.  
  59. /*
  60.  * GUIDS used by Service Providers shipped with DirectPlay
  61.  * Use these to identify Service Provider returned by EnumConnections
  62.  */
  63.  
  64. // GUID for IPX service provider
  65. // {685BC400-9D2C-11cf-A9CD-00AA006886E3}
  66. DEFINE_GUID(DPSPGUID_IPX, 
  67. 0x685bc400, 0x9d2c, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
  68.  
  69. // GUID for TCP/IP service provider
  70. // 36E95EE0-8577-11cf-960C-0080C7534E82
  71. DEFINE_GUID(DPSPGUID_TCPIP,
  72. 0x36E95EE0, 0x8577, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
  73.  
  74. // GUID for Serial service provider
  75. // {0F1D6860-88D9-11cf-9C4E-00A0C905425E}
  76. DEFINE_GUID(DPSPGUID_SERIAL,                        
  77. 0xf1d6860, 0x88d9, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
  78.  
  79. // GUID for Modem service provider
  80. // {44EAA760-CB68-11cf-9C4E-00A0C905425E}
  81. DEFINE_GUID(DPSPGUID_MODEM,
  82. 0x44eaa760, 0xcb68, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
  83.  
  84. /****************************************************************************
  85.  *
  86.  * DirectPlay Structures
  87.  *
  88.  * Various structures used to invoke DirectPlay.
  89.  *
  90.  ****************************************************************************/
  91.  
  92. #ifndef IDIRECTPLAY2_OR_GREATER
  93. typedef struct IDirectPlay        FAR *LPDIRECTPLAY;
  94. #else
  95. typedef struct IUnknown           FAR *LPDIRECTPLAY;
  96. #endif
  97.  
  98. typedef struct IDirectPlay2       FAR *LPDIRECTPLAY2;
  99. typedef struct IDirectPlay2       FAR *LPDIRECTPLAY2A;
  100. typedef struct IDirectPlay2       IDirectPlay2A;
  101.  
  102. typedef struct IDirectPlay3       FAR *LPDIRECTPLAY3;
  103. typedef struct IDirectPlay3       FAR *LPDIRECTPLAY3A;
  104. typedef struct IDirectPlay3       IDirectPlay3A;
  105.  
  106. typedef struct IDirectPlay4       FAR *LPDIRECTPLAY4;
  107. typedef struct IDirectPlay4       FAR *LPDIRECTPLAY4A;
  108. typedef struct IDirectPlay4       IDirectPlay4A;
  109.  
  110. /*
  111.  * DPID
  112.  * DirectPlay player and group ID
  113.  */
  114. typedef DWORD DPID, FAR *LPDPID;
  115.  
  116. /*
  117.  * DPID that system messages come from
  118.  */
  119. #define DPID_SYSMSG         0
  120.  
  121. /*
  122.  * DPID representing all players in the session
  123.  */
  124. #define DPID_ALLPLAYERS     0
  125.  
  126. /*
  127.  * DPID representing the server player
  128.  */
  129. #define DPID_SERVERPLAYER    1
  130.  
  131.  
  132. /*
  133.  * DPID representing the maxiumum ID in the range of DPID's reserved for
  134.  * use by DirectPlay.
  135.  */
  136. #define DPID_RESERVEDRANGE     100
  137.  
  138. /*
  139.  * The player ID is unknown (used with e.g. DPSESSION_NOMESSAGEID)
  140.  */
  141. #define DPID_UNKNOWN        0xFFFFFFFF
  142.  
  143. /*
  144.  * DPCAPS
  145.  * Used to obtain the capabilities of a DirectPlay object
  146.  */
  147. typedef struct
  148. {
  149.     DWORD dwSize;               // Size of structure, in bytes
  150.     DWORD dwFlags;              // DPCAPS_xxx flags
  151.     DWORD dwMaxBufferSize;      // Maximum message size, in bytes,  for this service provider
  152.     DWORD dwMaxQueueSize;       // Obsolete. 
  153.     DWORD dwMaxPlayers;         // Maximum players/groups (local + remote)
  154.     DWORD dwHundredBaud;        // Bandwidth in 100 bits per second units; 
  155.                                 // i.e. 24 is 2400, 96 is 9600, etc.
  156.     DWORD dwLatency;            // Estimated latency; 0 = unknown
  157.     DWORD dwMaxLocalPlayers;    // Maximum # of locally created players allowed
  158.     DWORD dwHeaderLength;       // Maximum header length, in bytes, on messages
  159.                                 // added by the service provider
  160.     DWORD dwTimeout;            // Service provider's suggested timeout value
  161.                                 // This is how long DirectPlay will wait for 
  162.                                 // responses to system messages
  163. } DPCAPS, FAR *LPDPCAPS;
  164.  
  165. /*
  166.  * This DirectPlay object is the session host.  If the host exits the
  167.  * session, another application will become the host and receive a
  168.  * DPSYS_HOST system message.
  169.  */
  170. #define DPCAPS_ISHOST               0x00000002
  171.  
  172. /*
  173.  * The service provider bound to this DirectPlay object can optimize
  174.  * group messaging.
  175.  */
  176. #define DPCAPS_GROUPOPTIMIZED       0x00000008
  177.  
  178. /*
  179.  * The service provider bound to this DirectPlay object can optimize
  180.  * keep alives (see DPSESSION_KEEPALIVE)
  181.  */
  182. #define DPCAPS_KEEPALIVEOPTIMIZED   0x00000010
  183.  
  184. /*
  185.  * The service provider bound to this DirectPlay object can optimize
  186.  * guaranteed message delivery.
  187.  */
  188. #define DPCAPS_GUARANTEEDOPTIMIZED  0x00000020
  189.  
  190. /*
  191.  * This DirectPlay object supports guaranteed message delivery.
  192.  */
  193. #define DPCAPS_GUARANTEEDSUPPORTED  0x00000040
  194.  
  195. /*
  196.  * This DirectPlay object supports digital signing of messages.
  197.  */
  198. #define DPCAPS_SIGNINGSUPPORTED     0x00000080
  199.  
  200. /*
  201.  * This DirectPlay object supports encryption of messages.
  202.  */
  203. #define DPCAPS_ENCRYPTIONSUPPORTED  0x00000100
  204.  
  205. /*
  206.  * This DirectPlay player was created on this machine
  207.  */
  208. #define DPPLAYERCAPS_LOCAL            0x00000800
  209.  
  210. /*
  211.  * Current Open settings supports all forms of Cancel
  212.  */
  213. #define DPCAPS_ASYNCCANCELSUPPORTED    0x00001000
  214.  
  215. /*
  216.  * Current Open settings supports CancelAll, but not Cancel
  217.  */
  218. #define DPCAPS_ASYNCCANCELALLSUPPORTED 0x00002000
  219.  
  220. /*
  221.  *  Current Open settings supports Send Timeouts for sends
  222.  */
  223. #define DPCAPS_SENDTIMEOUTSUPPORTED   0x00004000
  224.  
  225. /*
  226.  *  Current Open settings supports send priority
  227.  */
  228. #define DPCAPS_SENDPRIORITYSUPPORTED   0x00008000
  229.  
  230. /*
  231.  *  Current Open settings supports DPSEND_ASYNC flag
  232.  */
  233. #define DPCAPS_ASYNCSUPPORTED            0x00010000
  234.  
  235.  
  236. /*
  237.  * DPSESSIONDESC2
  238.  * Used to describe the properties of a DirectPlay
  239.  * session instance
  240.  */
  241. typedef struct
  242. {
  243.     DWORD   dwSize;             // Size of structure
  244.     DWORD   dwFlags;            // DPSESSION_xxx flags
  245.     GUID    guidInstance;       // ID for the session instance
  246.     GUID    guidApplication;    // GUID of the DirectPlay application.
  247.                                 // GUID_NULL for all applications.
  248.     DWORD   dwMaxPlayers;       // Maximum # players allowed in session
  249.     DWORD   dwCurrentPlayers;   // Current # players in session (read only)
  250.     union
  251.     {                           // Name of the session
  252.         LPWSTR  lpszSessionName;    // Unicode
  253.         LPSTR   lpszSessionNameA;   // ANSI
  254.     };
  255.     union
  256.     {                           // Password of the session (optional)
  257.         LPWSTR  lpszPassword;       // Unicode
  258.         LPSTR   lpszPasswordA;      // ANSI
  259.     };
  260.     DWORD_PTR   dwReserved1;        // Reserved for future MS use.
  261.     DWORD_PTR   dwReserved2;
  262.     DWORD_PTR   dwUser1;            // For use by the application
  263.     DWORD_PTR   dwUser2;
  264.     DWORD_PTR   dwUser3;
  265.     DWORD_PTR   dwUser4;
  266. } DPSESSIONDESC2, FAR *LPDPSESSIONDESC2;
  267.  
  268. typedef DPSESSIONDESC2 * VOL LPDPSESSIONDESC2_V;
  269.  
  270. /*
  271.  * LPCDPSESSIONDESC2
  272.  * A constant pointer to DPSESSIONDESC2
  273.  */
  274. typedef const DPSESSIONDESC2 FAR *LPCDPSESSIONDESC2;
  275.  
  276. /*
  277.  * Applications cannot create new players in this session.
  278.  */
  279. #define DPSESSION_NEWPLAYERSDISABLED    0x00000001 
  280.  
  281. /*
  282.  * If the DirectPlay object that created the session, the host,
  283.  * quits, then the host will attempt to migrate to another
  284.  * DirectPlay object so that new players can continue to be created
  285.  * and new applications can join the session.
  286.  */
  287. #define DPSESSION_MIGRATEHOST           0x00000004
  288.  
  289. /*
  290.  * This flag tells DirectPlay not to set the idPlayerTo and idPlayerFrom 
  291.  * fields in player messages.  This cuts two DWORD's off the message 
  292.  * overhead.
  293.  */
  294. #define DPSESSION_NOMESSAGEID           0x00000008
  295.  
  296.  
  297. /*
  298.  * This flag tells DirectPlay to not allow any new applications to
  299.  * join the session.  Applications already in the session can still
  300.  * create new players.
  301.  */
  302. #define DPSESSION_JOINDISABLED          0x00000020
  303.  
  304. /*
  305.  * This flag tells DirectPlay to detect when remote players 
  306.  * exit abnormally (e.g. their computer or modem gets unplugged)
  307.  */
  308. #define DPSESSION_KEEPALIVE             0x00000040
  309.  
  310. /*
  311.  * This flag tells DirectPlay not to send a message to all players
  312.  * when a players remote data changes
  313.  */
  314. #define DPSESSION_NODATAMESSAGES        0x00000080
  315.  
  316. /*
  317.  * This flag indicates that the session belongs to a secure server
  318.  * and needs user authentication
  319.  */
  320. #define DPSESSION_SECURESERVER          0x00000100
  321.  
  322. /*
  323.  * This flag indicates that the session is private and requirs a password
  324.  * for EnumSessions as well as Open.
  325.  */
  326. #define DPSESSION_PRIVATE               0x00000200
  327.  
  328. /*
  329.  * This flag indicates that the session requires a password for joining.
  330.  */
  331. #define DPSESSION_PASSWORDREQUIRED      0x00000400
  332.  
  333. /*
  334.  * This flag tells DirectPlay to route all messages through the server
  335.  */
  336. #define DPSESSION_MULTICASTSERVER        0x00000800
  337.  
  338. /*
  339.  * This flag tells DirectPlay to only download information about the
  340.  * DPPLAYER_SERVERPLAYER.  
  341.  */
  342. #define DPSESSION_CLIENTSERVER            0x00001000
  343.  
  344. /*
  345.  * This flag tells DirectPlay to use the protocol built into dplay
  346.  * for reliability and statistics all the time.  When this bit is
  347.  * set, only other sessions with this bit set can join or be joined.
  348.  */
  349. #define DPSESSION_DIRECTPLAYPROTOCOL    0x00002000
  350.  
  351. /*
  352.  * This flag tells DirectPlay that preserving order of received
  353.  * packets is not important, when using reliable delivery.  This
  354.  * will allow messages to be indicated out of order if preceding
  355.  * messages have not yet arrived.  Otherwise DPLAY will wait for
  356.  * earlier messages before delivering later reliable messages.
  357.  */
  358. #define DPSESSION_NOPRESERVEORDER        0x00004000
  359.  
  360.  
  361. /*
  362.  * This flag tells DirectPlay to optimize communication for latency
  363.  */
  364. #define DPSESSION_OPTIMIZELATENCY        0x00008000
  365.  
  366. /*
  367.  * This flag allows lobby launched games that aren't voice enabled
  368.  * to get voice capabilities.
  369.  */
  370. #define DPSESSION_ALLOWVOICERETRO        0x00010000
  371.  
  372. /*
  373.  * This flag supresses transmission of session desc changes.
  374.  * DPSESSION_NODATAMESSAGES was supposed to do that, but SetSessionDesc
  375.  * was ignoring the flag and some apps depended on the broken behavior, this
  376.  * flag allows applications to get the right behaviour without breaking apps depending
  377.  * on old broken behavior.
  378.  */
  379. #define DPSESSION_NOSESSIONDESCMESSAGES        0x00020000
  380.  
  381. /*
  382.  * DPNAME
  383.  * Used to hold the name of a DirectPlay entity
  384.  * like a player or a group
  385.  */
  386. typedef struct 
  387. {
  388.     DWORD   dwSize;             // Size of structure
  389.     DWORD   dwFlags;            // Not used. Must be zero.
  390.     union
  391.     {                           // The short or friendly name
  392.         LPWSTR  lpszShortName;  // Unicode
  393.         LPSTR   lpszShortNameA; // ANSI
  394.     };
  395.     union
  396.     {                           // The long or formal name
  397.         LPWSTR  lpszLongName;   // Unicode
  398.         LPSTR   lpszLongNameA;  // ANSI
  399.     };
  400.  
  401. } DPNAME, FAR *LPDPNAME;
  402.  
  403. /*
  404.  * LPCDPNAME
  405.  * A constant pointer to DPNAME
  406.  */
  407. typedef const DPNAME FAR *LPCDPNAME;
  408.  
  409. /*
  410.  * DPCREDENTIALS
  411.  * Used to hold the user name and password of a DirectPlay user
  412.  */
  413. typedef struct 
  414. {
  415.     DWORD dwSize;               // Size of structure
  416.     DWORD dwFlags;              // Not used. Must be zero.
  417.     union
  418.     {                           // User name of the account
  419.         LPWSTR  lpszUsername;   // Unicode
  420.         LPSTR   lpszUsernameA;  // ANSI
  421.     };    
  422.     union
  423.     {                           // Password of the account
  424.         LPWSTR  lpszPassword;   // Unicode
  425.         LPSTR   lpszPasswordA;  // ANSI
  426.     };    
  427.     union
  428.     {                           // Domain name of the account
  429.         LPWSTR  lpszDomain;     // Unicode
  430.         LPSTR   lpszDomainA;    // ANSI
  431.     };    
  432. } DPCREDENTIALS, FAR *LPDPCREDENTIALS;
  433.  
  434. typedef const DPCREDENTIALS FAR *LPCDPCREDENTIALS;
  435.  
  436. /*
  437.  * DPSECURITYDESC
  438.  * Used to describe the security properties of a DirectPlay
  439.  * session instance
  440.  */
  441. typedef struct 
  442. {
  443.     DWORD dwSize;                   // Size of structure
  444.     DWORD dwFlags;                  // Not used. Must be zero.
  445.     union
  446.     {                               // SSPI provider name
  447.         LPWSTR  lpszSSPIProvider;   // Unicode
  448.         LPSTR   lpszSSPIProviderA;  // ANSI
  449.     };
  450.     union
  451.     {                               // CAPI provider name
  452.         LPWSTR lpszCAPIProvider;    // Unicode
  453.         LPSTR  lpszCAPIProviderA;   // ANSI
  454.     };
  455.     DWORD dwCAPIProviderType;       // Crypto Service Provider type
  456.     DWORD dwEncryptionAlgorithm;    // Encryption Algorithm type
  457. } DPSECURITYDESC, FAR *LPDPSECURITYDESC;
  458.  
  459. typedef const DPSECURITYDESC FAR *LPCDPSECURITYDESC;
  460.  
  461. /*
  462.  * DPACCOUNTDESC
  463.  * Used to describe a user membership account
  464.  */
  465. typedef struct 
  466. {
  467.     DWORD dwSize;                   // Size of structure
  468.     DWORD dwFlags;                  // Not used. Must be zero.
  469.     union
  470.     {                               // Account identifier
  471.         LPWSTR  lpszAccountID;      // Unicode
  472.         LPSTR   lpszAccountIDA;     // ANSI
  473.     };
  474. } DPACCOUNTDESC, FAR *LPDPACCOUNTDESC;
  475.  
  476. typedef const DPACCOUNTDESC FAR *LPCDPACCOUNTDESC;
  477.  
  478. /*
  479.  * LPCGUID
  480.  * A constant pointer to a guid
  481.  */
  482. typedef const GUID FAR *LPCGUID;
  483.  
  484. /*
  485.  * DPLCONNECTION
  486.  * Used to hold all in the informaion needed to connect
  487.  * an application to a session or create a session
  488.  */
  489. typedef struct
  490. {
  491.     DWORD               dwSize;             // Size of this structure
  492.     DWORD               dwFlags;            // Flags specific to this structure
  493.     LPDPSESSIONDESC2    lpSessionDesc;      // Pointer to session desc to use on connect
  494.     LPDPNAME            lpPlayerName;       // Pointer to Player name structure
  495.     GUID                guidSP;             // GUID of the DPlay SP to use
  496.     LPVOID              lpAddress;          // Address for service provider
  497.     DWORD               dwAddressSize;      // Size of address data
  498. } DPLCONNECTION, FAR *LPDPLCONNECTION;
  499.  
  500. /*
  501.  * LPCDPLCONNECTION
  502.  * A constant pointer to DPLCONNECTION
  503.  */
  504. typedef const DPLCONNECTION FAR *LPCDPLCONNECTION;
  505.  
  506. /*
  507.  * DPCHAT
  508.  * Used to hold the a DirectPlay chat message
  509.  */
  510. typedef struct
  511. {
  512.     DWORD               dwSize;
  513.     DWORD               dwFlags;
  514.     union
  515.     {                          // Message string
  516.         LPWSTR  lpszMessage;   // Unicode
  517.         LPSTR   lpszMessageA;  // ANSI
  518.     };    
  519. } DPCHAT, FAR * LPDPCHAT;
  520.  
  521. /*
  522.  * SGBUFFER
  523.  * Scatter Gather Buffer used for SendEx
  524.  */
  525. typedef struct 
  526. {
  527.     UINT         len;       // length of buffer data
  528.     PUCHAR         pData;        // pointer to buffer data
  529. } SGBUFFER, *PSGBUFFER, FAR *LPSGBUFFER;
  530.  
  531.  
  532. /****************************************************************************
  533.  *
  534.  * Prototypes for DirectPlay callback functions
  535.  *
  536.  ****************************************************************************/
  537.  
  538. /*
  539.  * Callback for IDirectPlay2::EnumSessions
  540.  */
  541. typedef BOOL (FAR PASCAL * LPDPENUMSESSIONSCALLBACK2)(
  542.     LPCDPSESSIONDESC2   lpThisSD,
  543.     LPDWORD             lpdwTimeOut,
  544.     DWORD               dwFlags,
  545.     LPVOID              lpContext );
  546.  
  547. /*
  548.  * This flag is set on the EnumSessions callback dwFlags parameter when
  549.  * the time out has occurred. There will be no session data for this 
  550.  * callback. If *lpdwTimeOut is set to a non-zero value and the 
  551.  * EnumSessionsCallback function returns TRUE then EnumSessions will 
  552.  * continue waiting until the next timeout occurs. Timeouts are in 
  553.  * milliseconds.
  554.  */
  555. #define DPESC_TIMEDOUT          0x00000001
  556.  
  557.  
  558. /*
  559.  * Callback for IDirectPlay2::EnumPlayers
  560.  *              IDirectPlay2::EnumGroups
  561.  *              IDirectPlay2::EnumGroupPlayers
  562.  */
  563. typedef BOOL (FAR PASCAL *LPDPENUMPLAYERSCALLBACK2)(
  564.     DPID            dpId,
  565.     DWORD           dwPlayerType,
  566.     LPCDPNAME       lpName,
  567.     DWORD           dwFlags,
  568.     LPVOID          lpContext );
  569.  
  570.  
  571. /*
  572.  * Unicode callback for DirectPlayEnumerate
  573.  * This callback prototype will be used if compiling
  574.  * for Unicode strings
  575.  */
  576. typedef BOOL (FAR PASCAL * LPDPENUMDPCALLBACK)(
  577.     LPGUID      lpguidSP,
  578.     LPWSTR      lpSPName,
  579.     DWORD       dwMajorVersion,
  580.     DWORD       dwMinorVersion,
  581.     LPVOID      lpContext);
  582.  
  583. /*
  584.  * ANSI callback for DirectPlayEnumerate
  585.  * This callback prototype will be used if compiling
  586.  * for ANSI strings
  587.  */
  588. typedef BOOL (FAR PASCAL * LPDPENUMDPCALLBACKA)(
  589.     LPGUID      lpguidSP,
  590.     LPSTR       lpSPName,
  591.     DWORD       dwMajorVersion,     
  592.     DWORD       dwMinorVersion,
  593.     LPVOID      lpContext);
  594.  
  595. /*
  596.  * Callback for IDirectPlay3(A)::EnumConnections
  597.  */
  598. typedef BOOL (FAR PASCAL * LPDPENUMCONNECTIONSCALLBACK)(
  599.     LPCGUID     lpguidSP,
  600.     LPVOID        lpConnection,
  601.     DWORD        dwConnectionSize,
  602.     LPCDPNAME   lpName,
  603.     DWORD         dwFlags,
  604.     LPVOID         lpContext);
  605.  
  606.  
  607. /*
  608.  * API's
  609.  */
  610.  
  611. #ifdef UNICODE
  612. #define DirectPlayEnumerate     DirectPlayEnumerateW
  613. #else
  614. #define DirectPlayEnumerate     DirectPlayEnumerateA
  615. #endif // UNICODE
  616.  
  617. extern HRESULT WINAPI DirectPlayEnumerateA( LPDPENUMDPCALLBACKA, LPVOID );
  618. extern HRESULT WINAPI DirectPlayEnumerateW( LPDPENUMDPCALLBACK, LPVOID );
  619. extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY *lplpDP, IUnknown *pUnk);
  620.  
  621. /****************************************************************************
  622.  *
  623.  * IDirectPlay2 (and IDirectPlay2A) Interface
  624.  *
  625.  ****************************************************************************/
  626.  
  627. #undef INTERFACE
  628. #define INTERFACE IDirectPlay2
  629. DECLARE_INTERFACE_( IDirectPlay2, IUnknown )
  630. {
  631.     /*** IUnknown methods ***/
  632.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  633.     STDMETHOD_(ULONG,AddRef)        (THIS)  PURE;
  634.     STDMETHOD_(ULONG,Release)       (THIS) PURE;
  635.     /*** IDirectPlay2 methods ***/
  636.     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
  637.     STDMETHOD(Close)                (THIS) PURE;
  638.     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
  639.     STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE;
  640.     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
  641.     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
  642.     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
  643.     STDMETHOD(EnumGroupPlayers)     (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  644.     STDMETHOD(EnumGroups)           (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  645.     STDMETHOD(EnumPlayers)          (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  646.     STDMETHOD(EnumSessions)         (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE;
  647.     STDMETHOD(GetCaps)              (THIS_ LPDPCAPS,DWORD) PURE;
  648.     STDMETHOD(GetGroupData)         (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
  649.     STDMETHOD(GetGroupName)         (THIS_ DPID,LPVOID,LPDWORD) PURE;
  650.     STDMETHOD(GetMessageCount)      (THIS_ DPID, LPDWORD) PURE;
  651.     STDMETHOD(GetPlayerAddress)     (THIS_ DPID,LPVOID,LPDWORD) PURE;
  652.     STDMETHOD(GetPlayerCaps)        (THIS_ DPID,LPDPCAPS,DWORD) PURE;
  653.     STDMETHOD(GetPlayerData)        (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
  654.     STDMETHOD(GetPlayerName)        (THIS_ DPID,LPVOID,LPDWORD) PURE;
  655.     STDMETHOD(GetSessionDesc)       (THIS_ LPVOID,LPDWORD) PURE;
  656.     STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;
  657.     STDMETHOD(Open)                 (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
  658.     STDMETHOD(Receive)              (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE;
  659.     STDMETHOD(Send)                 (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE;
  660.     STDMETHOD(SetGroupData)         (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
  661.     STDMETHOD(SetGroupName)         (THIS_ DPID,LPDPNAME,DWORD) PURE;
  662.     STDMETHOD(SetPlayerData)        (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
  663.     STDMETHOD(SetPlayerName)        (THIS_ DPID,LPDPNAME,DWORD) PURE;
  664.     STDMETHOD(SetSessionDesc)       (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
  665. };
  666.  
  667. /****************************************************************************
  668.  *
  669.  * IDirectPlay2 interface macros
  670.  *
  671.  ****************************************************************************/
  672.  
  673. #if !defined(__cplusplus) || defined(CINTERFACE)
  674.  
  675. #define IDirectPlay2_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
  676. #define IDirectPlay2_AddRef(p)                      (p)->lpVtbl->AddRef(p)
  677. #define IDirectPlay2_Release(p)                     (p)->lpVtbl->Release(p)
  678. #define IDirectPlay2_AddPlayerToGroup(p,a,b)        (p)->lpVtbl->AddPlayerToGroup(p,a,b)
  679. #define IDirectPlay2_Close(p)                       (p)->lpVtbl->Close(p)
  680. #define IDirectPlay2_CreateGroup(p,a,b,c,d,e)       (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
  681. #define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f)    (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
  682. #define IDirectPlay2_DeletePlayerFromGroup(p,a,b)   (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
  683. #define IDirectPlay2_DestroyGroup(p,a)              (p)->lpVtbl->DestroyGroup(p,a)
  684. #define IDirectPlay2_DestroyPlayer(p,a)             (p)->lpVtbl->DestroyPlayer(p,a)
  685. #define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e)  (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
  686. #define IDirectPlay2_EnumGroups(p,a,b,c,d)          (p)->lpVtbl->EnumGroups(p,a,b,c,d)
  687. #define IDirectPlay2_EnumPlayers(p,a,b,c,d)         (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
  688. #define IDirectPlay2_EnumSessions(p,a,b,c,d,e)      (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
  689. #define IDirectPlay2_GetCaps(p,a,b)                 (p)->lpVtbl->GetCaps(p,a,b)
  690. #define IDirectPlay2_GetMessageCount(p,a,b)         (p)->lpVtbl->GetMessageCount(p,a,b)
  691. #define IDirectPlay2_GetGroupData(p,a,b,c,d)        (p)->lpVtbl->GetGroupData(p,a,b,c,d)
  692. #define IDirectPlay2_GetGroupName(p,a,b,c)          (p)->lpVtbl->GetGroupName(p,a,b,c)
  693. #define IDirectPlay2_GetPlayerAddress(p,a,b,c)      (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
  694. #define IDirectPlay2_GetPlayerCaps(p,a,b,c)         (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
  695. #define IDirectPlay2_GetPlayerData(p,a,b,c,d)       (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
  696. #define IDirectPlay2_GetPlayerName(p,a,b,c)         (p)->lpVtbl->GetPlayerName(p,a,b,c)
  697. #define IDirectPlay2_GetSessionDesc(p,a,b)          (p)->lpVtbl->GetSessionDesc(p,a,b)
  698. #define IDirectPlay2_Initialize(p,a)                (p)->lpVtbl->Initialize(p,a)
  699. #define IDirectPlay2_Open(p,a,b)                    (p)->lpVtbl->Open(p,a,b)
  700. #define IDirectPlay2_Receive(p,a,b,c,d,e)           (p)->lpVtbl->Receive(p,a,b,c,d,e)
  701. #define IDirectPlay2_Send(p,a,b,c,d,e)              (p)->lpVtbl->Send(p,a,b,c,d,e)
  702. #define IDirectPlay2_SetGroupData(p,a,b,c,d)        (p)->lpVtbl->SetGroupData(p,a,b,c,d)
  703. #define IDirectPlay2_SetGroupName(p,a,b,c)          (p)->lpVtbl->SetGroupName(p,a,b,c)
  704. #define IDirectPlay2_SetPlayerData(p,a,b,c,d)       (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
  705. #define IDirectPlay2_SetPlayerName(p,a,b,c)         (p)->lpVtbl->SetPlayerName(p,a,b,c)
  706. #define IDirectPlay2_SetSessionDesc(p,a,b)          (p)->lpVtbl->SetSessionDesc(p,a,b)
  707.  
  708. #else /* C++ */
  709.  
  710. #define IDirectPlay2_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)
  711. #define IDirectPlay2_AddRef(p)                      (p)->AddRef()
  712. #define IDirectPlay2_Release(p)                     (p)->Release()
  713. #define IDirectPlay2_AddPlayerToGroup(p,a,b)        (p)->AddPlayerToGroup(a,b)
  714. #define IDirectPlay2_Close(p)                       (p)->Close()
  715. #define IDirectPlay2_CreateGroup(p,a,b,c,d,e)       (p)->CreateGroup(a,b,c,d,e)
  716. #define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f)    (p)->CreatePlayer(a,b,c,d,e,f)
  717. #define IDirectPlay2_DeletePlayerFromGroup(p,a,b)   (p)->DeletePlayerFromGroup(a,b)
  718. #define IDirectPlay2_DestroyGroup(p,a)              (p)->DestroyGroup(a)
  719. #define IDirectPlay2_DestroyPlayer(p,a)             (p)->DestroyPlayer(a)
  720. #define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e)  (p)->EnumGroupPlayers(a,b,c,d,e)
  721. #define IDirectPlay2_EnumGroups(p,a,b,c,d)          (p)->EnumGroups(a,b,c,d)
  722. #define IDirectPlay2_EnumPlayers(p,a,b,c,d)         (p)->EnumPlayers(a,b,c,d)
  723. #define IDirectPlay2_EnumSessions(p,a,b,c,d,e)      (p)->EnumSessions(a,b,c,d,e)
  724. #define IDirectPlay2_GetCaps(p,a,b)                 (p)->GetCaps(a,b)
  725. #define IDirectPlay2_GetMessageCount(p,a,b)         (p)->GetMessageCount(a,b)
  726. #define IDirectPlay2_GetGroupData(p,a,b,c,d)        (p)->GetGroupData(a,b,c,d)
  727. #define IDirectPlay2_GetGroupName(p,a,b,c)          (p)->GetGroupName(a,b,c)
  728. #define IDirectPlay2_GetPlayerAddress(p,a,b,c)      (p)->GetPlayerAddress(a,b,c)
  729. #define IDirectPlay2_GetPlayerCaps(p,a,b,c)         (p)->GetPlayerCaps(a,b,c)
  730. #define IDirectPlay2_GetPlayerData(p,a,b,c,d)       (p)->GetPlayerData(a,b,c,d)
  731. #define IDirectPlay2_GetPlayerName(p,a,b,c)         (p)->GetPlayerName(a,b,c)
  732. #define IDirectPlay2_GetSessionDesc(p,a,b)          (p)->GetSessionDesc(a,b)
  733. #define IDirectPlay2_Initialize(p,a)                (p)->Initialize(a)
  734. #define IDirectPlay2_Open(p,a,b)                    (p)->Open(a,b)
  735. #define IDirectPlay2_Receive(p,a,b,c,d,e)           (p)->Receive(a,b,c,d,e)
  736. #define IDirectPlay2_Send(p,a,b,c,d,e)              (p)->Send(a,b,c,d,e)
  737. #define IDirectPlay2_SetGroupData(p,a,b,c,d)        (p)->SetGroupData(a,b,c,d)
  738. #define IDirectPlay2_SetGroupName(p,a,b,c)          (p)->SetGroupName(a,b,c)
  739. #define IDirectPlay2_SetPlayerData(p,a,b,c,d)       (p)->SetPlayerData(a,b,c,d)
  740. #define IDirectPlay2_SetPlayerName(p,a,b,c)         (p)->SetPlayerName(a,b,c)
  741. #define IDirectPlay2_SetSessionDesc(p,a,b)          (p)->SetSessionDesc(a,b)
  742.  
  743. #endif
  744.  
  745. /****************************************************************************
  746.  *
  747.  * IDirectPlay3 (and IDirectPlay3A) Interface
  748.  *
  749.  ****************************************************************************/
  750.  
  751. #undef INTERFACE
  752. #define INTERFACE IDirectPlay3
  753. DECLARE_INTERFACE_( IDirectPlay3, IDirectPlay2 )
  754. {
  755.     /*** IUnknown methods ***/
  756.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  757.     STDMETHOD_(ULONG,AddRef)        (THIS)  PURE;
  758.     STDMETHOD_(ULONG,Release)       (THIS) PURE;
  759.     /*** IDirectPlay2 methods ***/
  760.     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
  761.     STDMETHOD(Close)                (THIS) PURE;
  762.     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
  763.     STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE;
  764.     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
  765.     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
  766.     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
  767.     STDMETHOD(EnumGroupPlayers)     (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  768.     STDMETHOD(EnumGroups)           (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  769.     STDMETHOD(EnumPlayers)          (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  770.     STDMETHOD(EnumSessions)         (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE;
  771.     STDMETHOD(GetCaps)              (THIS_ LPDPCAPS,DWORD) PURE;
  772.     STDMETHOD(GetGroupData)         (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
  773.     STDMETHOD(GetGroupName)         (THIS_ DPID,LPVOID,LPDWORD) PURE;
  774.     STDMETHOD(GetMessageCount)      (THIS_ DPID, LPDWORD) PURE;
  775.     STDMETHOD(GetPlayerAddress)     (THIS_ DPID,LPVOID,LPDWORD) PURE;
  776.     STDMETHOD(GetPlayerCaps)        (THIS_ DPID,LPDPCAPS,DWORD) PURE;
  777.     STDMETHOD(GetPlayerData)        (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
  778.     STDMETHOD(GetPlayerName)        (THIS_ DPID,LPVOID,LPDWORD) PURE;
  779.     STDMETHOD(GetSessionDesc)       (THIS_ LPVOID,LPDWORD) PURE;
  780.     STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;
  781.     STDMETHOD(Open)                 (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
  782.     STDMETHOD(Receive)              (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE;
  783.     STDMETHOD(Send)                 (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE;
  784.     STDMETHOD(SetGroupData)         (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
  785.     STDMETHOD(SetGroupName)         (THIS_ DPID,LPDPNAME,DWORD) PURE;
  786.     STDMETHOD(SetPlayerData)        (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
  787.     STDMETHOD(SetPlayerName)        (THIS_ DPID,LPDPNAME,DWORD) PURE;
  788.     STDMETHOD(SetSessionDesc)       (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
  789.     /*** IDirectPlay3 methods ***/
  790.     STDMETHOD(AddGroupToGroup)      (THIS_ DPID, DPID) PURE;
  791.     STDMETHOD(CreateGroupInGroup)   (THIS_ DPID,LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
  792.     STDMETHOD(DeleteGroupFromGroup)    (THIS_ DPID,DPID) PURE;    
  793.     STDMETHOD(EnumConnections)         (THIS_ LPCGUID,LPDPENUMCONNECTIONSCALLBACK,LPVOID,DWORD) PURE;
  794.     STDMETHOD(EnumGroupsInGroup)    (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  795.     STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD, DPID, LPVOID, LPDWORD) PURE;
  796.     STDMETHOD(InitializeConnection) (THIS_ LPVOID,DWORD) PURE;
  797.     STDMETHOD(SecureOpen)           (THIS_ LPCDPSESSIONDESC2,DWORD,LPCDPSECURITYDESC,LPCDPCREDENTIALS) PURE;
  798.     STDMETHOD(SendChatMessage)      (THIS_ DPID,DPID,DWORD,LPDPCHAT) PURE;
  799.     STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD,DPID,LPDPLCONNECTION) PURE;
  800.     STDMETHOD(StartSession)         (THIS_ DWORD,DPID) PURE;
  801.     STDMETHOD(GetGroupFlags)        (THIS_ DPID,LPDWORD) PURE;
  802.     STDMETHOD(GetGroupParent)       (THIS_ DPID,LPDPID) PURE;
  803.     STDMETHOD(GetPlayerAccount)     (THIS_ DPID, DWORD, LPVOID, LPDWORD) PURE;
  804.     STDMETHOD(GetPlayerFlags)       (THIS_ DPID,LPDWORD) PURE;
  805. };
  806.  
  807. /****************************************************************************
  808.  *
  809.  * IDirectPlay3 interface macros
  810.  *
  811.  ****************************************************************************/
  812.  
  813. #if !defined(__cplusplus) || defined(CINTERFACE)
  814.  
  815. #define IDirectPlay3_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
  816. #define IDirectPlay3_AddRef(p)                      (p)->lpVtbl->AddRef(p)
  817. #define IDirectPlay3_Release(p)                     (p)->lpVtbl->Release(p)
  818. #define IDirectPlay3_AddPlayerToGroup(p,a,b)        (p)->lpVtbl->AddPlayerToGroup(p,a,b)
  819. #define IDirectPlay3_Close(p)                       (p)->lpVtbl->Close(p)
  820. #define IDirectPlay3_CreateGroup(p,a,b,c,d,e)       (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
  821. #define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f)    (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
  822. #define IDirectPlay3_DeletePlayerFromGroup(p,a,b)   (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
  823. #define IDirectPlay3_DestroyGroup(p,a)              (p)->lpVtbl->DestroyGroup(p,a)
  824. #define IDirectPlay3_DestroyPlayer(p,a)             (p)->lpVtbl->DestroyPlayer(p,a)
  825. #define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e)  (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
  826. #define IDirectPlay3_EnumGroups(p,a,b,c,d)          (p)->lpVtbl->EnumGroups(p,a,b,c,d)
  827. #define IDirectPlay3_EnumPlayers(p,a,b,c,d)         (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
  828. #define IDirectPlay3_EnumSessions(p,a,b,c,d,e)      (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
  829. #define IDirectPlay3_GetCaps(p,a,b)                 (p)->lpVtbl->GetCaps(p,a,b)
  830. #define IDirectPlay3_GetMessageCount(p,a,b)         (p)->lpVtbl->GetMessageCount(p,a,b)
  831. #define IDirectPlay3_GetGroupData(p,a,b,c,d)        (p)->lpVtbl->GetGroupData(p,a,b,c,d)
  832. #define IDirectPlay3_GetGroupName(p,a,b,c)          (p)->lpVtbl->GetGroupName(p,a,b,c)
  833. #define IDirectPlay3_GetPlayerAddress(p,a,b,c)      (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
  834. #define IDirectPlay3_GetPlayerCaps(p,a,b,c)         (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
  835. #define IDirectPlay3_GetPlayerData(p,a,b,c,d)       (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
  836. #define IDirectPlay3_GetPlayerName(p,a,b,c)         (p)->lpVtbl->GetPlayerName(p,a,b,c)
  837. #define IDirectPlay3_GetSessionDesc(p,a,b)          (p)->lpVtbl->GetSessionDesc(p,a,b)
  838. #define IDirectPlay3_Initialize(p,a)                (p)->lpVtbl->Initialize(p,a)
  839. #define IDirectPlay3_Open(p,a,b)                    (p)->lpVtbl->Open(p,a,b)
  840. #define IDirectPlay3_Receive(p,a,b,c,d,e)           (p)->lpVtbl->Receive(p,a,b,c,d,e)
  841. #define IDirectPlay3_Send(p,a,b,c,d,e)              (p)->lpVtbl->Send(p,a,b,c,d,e)
  842. #define IDirectPlay3_SetGroupData(p,a,b,c,d)        (p)->lpVtbl->SetGroupData(p,a,b,c,d)
  843. #define IDirectPlay3_SetGroupName(p,a,b,c)          (p)->lpVtbl->SetGroupName(p,a,b,c)
  844. #define IDirectPlay3_SetPlayerData(p,a,b,c,d)       (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
  845. #define IDirectPlay3_SetPlayerName(p,a,b,c)         (p)->lpVtbl->SetPlayerName(p,a,b,c)
  846. #define IDirectPlay3_SetSessionDesc(p,a,b)          (p)->lpVtbl->SetSessionDesc(p,a,b)
  847. #define IDirectPlay3_AddGroupToGroup(p,a,b)         (p)->lpVtbl->AddGroupToGroup(p,a,b)
  848. #define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)
  849. #define IDirectPlay3_DeleteGroupFromGroup(p,a,b)       (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)
  850. #define IDirectPlay3_EnumConnections(p,a,b,c,d)     (p)->lpVtbl->EnumConnections(p,a,b,c,d)
  851. #define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)
  852. #define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)
  853. #define IDirectPlay3_InitializeConnection(p,a,b)     (p)->lpVtbl->InitializeConnection(p,a,b)
  854. #define IDirectPlay3_SecureOpen(p,a,b,c,d)          (p)->lpVtbl->SecureOpen(p,a,b,c,d)
  855. #define IDirectPlay3_SendChatMessage(p,a,b,c,d)     (p)->lpVtbl->SendChatMessage(p,a,b,c,d)
  856. #define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)
  857. #define IDirectPlay3_StartSession(p,a,b)            (p)->lpVtbl->StartSession(p,a,b)
  858. #define IDirectPlay3_GetGroupFlags(p,a,b)           (p)->lpVtbl->GetGroupFlags(p,a,b)
  859. #define IDirectPlay3_GetGroupParent(p,a,b)          (p)->lpVtbl->GetGroupParent(p,a,b)
  860. #define IDirectPlay3_GetPlayerAccount(p,a,b,c,d)    (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)
  861. #define IDirectPlay3_GetPlayerFlags(p,a,b)          (p)->lpVtbl->GetPlayerFlags(p,a,b)
  862.  
  863. #else /* C++ */
  864.  
  865. #define IDirectPlay3_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)
  866. #define IDirectPlay3_AddRef(p)                      (p)->AddRef()
  867. #define IDirectPlay3_Release(p)                     (p)->Release()
  868. #define IDirectPlay3_AddPlayerToGroup(p,a,b)        (p)->AddPlayerToGroup(a,b)
  869. #define IDirectPlay3_Close(p)                       (p)->Close()
  870. #define IDirectPlay3_CreateGroup(p,a,b,c,d,e)       (p)->CreateGroup(a,b,c,d,e)
  871. #define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f)    (p)->CreatePlayer(a,b,c,d,e,f)
  872. #define IDirectPlay3_DeletePlayerFromGroup(p,a,b)   (p)->DeletePlayerFromGroup(a,b)
  873. #define IDirectPlay3_DestroyGroup(p,a)              (p)->DestroyGroup(a)
  874. #define IDirectPlay3_DestroyPlayer(p,a)             (p)->DestroyPlayer(a)
  875. #define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e)  (p)->EnumGroupPlayers(a,b,c,d,e)
  876. #define IDirectPlay3_EnumGroups(p,a,b,c,d)          (p)->EnumGroups(a,b,c,d)
  877. #define IDirectPlay3_EnumPlayers(p,a,b,c,d)         (p)->EnumPlayers(a,b,c,d)
  878. #define IDirectPlay3_EnumSessions(p,a,b,c,d,e)      (p)->EnumSessions(a,b,c,d,e)
  879. #define IDirectPlay3_GetCaps(p,a,b)                 (p)->GetCaps(a,b)
  880. #define IDirectPlay3_GetMessageCount(p,a,b)         (p)->GetMessageCount(a,b)
  881. #define IDirectPlay3_GetGroupData(p,a,b,c,d)        (p)->GetGroupData(a,b,c,d)
  882. #define IDirectPlay3_GetGroupName(p,a,b,c)          (p)->GetGroupName(a,b,c)
  883. #define IDirectPlay3_GetPlayerAddress(p,a,b,c)      (p)->GetPlayerAddress(a,b,c)
  884. #define IDirectPlay3_GetPlayerCaps(p,a,b,c)         (p)->GetPlayerCaps(a,b,c)
  885. #define IDirectPlay3_GetPlayerData(p,a,b,c,d)       (p)->GetPlayerData(a,b,c,d)
  886. #define IDirectPlay3_GetPlayerName(p,a,b,c)         (p)->GetPlayerName(a,b,c)
  887. #define IDirectPlay3_GetSessionDesc(p,a,b)          (p)->GetSessionDesc(a,b)
  888. #define IDirectPlay3_Initialize(p,a)                (p)->Initialize(a)
  889. #define IDirectPlay3_Open(p,a,b)                    (p)->Open(a,b)
  890. #define IDirectPlay3_Receive(p,a,b,c,d,e)           (p)->Receive(a,b,c,d,e)
  891. #define IDirectPlay3_Send(p,a,b,c,d,e)              (p)->Send(a,b,c,d,e)
  892. #define IDirectPlay3_SetGroupData(p,a,b,c,d)        (p)->SetGroupData(a,b,c,d)
  893. #define IDirectPlay3_SetGroupName(p,a,b,c)          (p)->SetGroupName(a,b,c)
  894. #define IDirectPlay3_SetPlayerData(p,a,b,c,d)       (p)->SetPlayerData(a,b,c,d)
  895. #define IDirectPlay3_SetPlayerName(p,a,b,c)         (p)->SetPlayerName(a,b,c)
  896. #define IDirectPlay3_SetSessionDesc(p,a,b)          (p)->SetSessionDesc(a,b)
  897. #define IDirectPlay3_AddGroupToGroup(p,a,b)         (p)->AddGroupToGroup(a,b)
  898. #define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f)
  899. #define IDirectPlay3_DeleteGroupFromGroup(p,a,b)       (p)->DeleteGroupFromGroup(a,b)
  900. #define IDirectPlay3_EnumConnections(p,a,b,c,d)     (p)->EnumConnections(a,b,c,d)
  901. #define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e)
  902. #define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)
  903. #define IDirectPlay3_InitializeConnection(p,a,b)    (p)->InitializeConnection(a,b)
  904. #define IDirectPlay3_SecureOpen(p,a,b,c,d)          (p)->SecureOpen(a,b,c,d)
  905. #define IDirectPlay3_SendChatMessage(p,a,b,c,d)     (p)->SendChatMessage(a,b,c,d)
  906. #define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c)
  907. #define IDirectPlay3_StartSession(p,a,b)            (p)->StartSession(a,b)
  908. #define IDirectPlay3_GetGroupFlags(p,a,b)           (p)->GetGroupFlags(a,b)
  909. #define IDirectPlay3_GetGroupParent(p,a,b)          (p)->GetGroupParent(a,b)
  910. #define IDirectPlay3_GetPlayerAccount(p,a,b,c,d)    (p)->GetPlayerAccount(a,b,c,d)
  911. #define IDirectPlay3_GetPlayerFlags(p,a,b)          (p)->GetPlayerFlags(a,b)
  912.  
  913. #endif
  914.  
  915. /****************************************************************************
  916.  *
  917.  * IDirectPlay4 (and IDirectPlay4A) Interface
  918.  *
  919.  ****************************************************************************/
  920.  
  921. #undef INTERFACE
  922. #define INTERFACE IDirectPlay4
  923. DECLARE_INTERFACE_( IDirectPlay4, IDirectPlay3 )
  924. {
  925.     /*** IUnknown methods ***/
  926.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  927.     STDMETHOD_(ULONG,AddRef)        (THIS)  PURE;
  928.     STDMETHOD_(ULONG,Release)       (THIS) PURE;
  929.     /*** IDirectPlay2 methods ***/
  930.     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
  931.     STDMETHOD(Close)                (THIS) PURE;
  932.     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
  933.     STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE;
  934.     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
  935.     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
  936.     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
  937.     STDMETHOD(EnumGroupPlayers)     (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  938.     STDMETHOD(EnumGroups)           (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  939.     STDMETHOD(EnumPlayers)          (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  940.     STDMETHOD(EnumSessions)         (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE;
  941.     STDMETHOD(GetCaps)              (THIS_ LPDPCAPS,DWORD) PURE;
  942.     STDMETHOD(GetGroupData)         (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
  943.     STDMETHOD(GetGroupName)         (THIS_ DPID,LPVOID,LPDWORD) PURE;
  944.     STDMETHOD(GetMessageCount)      (THIS_ DPID, LPDWORD) PURE;
  945.     STDMETHOD(GetPlayerAddress)     (THIS_ DPID,LPVOID,LPDWORD) PURE;
  946.     STDMETHOD(GetPlayerCaps)        (THIS_ DPID,LPDPCAPS,DWORD) PURE;
  947.     STDMETHOD(GetPlayerData)        (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
  948.     STDMETHOD(GetPlayerName)        (THIS_ DPID,LPVOID,LPDWORD) PURE;
  949.     STDMETHOD(GetSessionDesc)       (THIS_ LPVOID,LPDWORD) PURE;
  950.     STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;
  951.     STDMETHOD(Open)                 (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
  952.     STDMETHOD(Receive)              (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE;
  953.     STDMETHOD(Send)                 (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE;
  954.     STDMETHOD(SetGroupData)         (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
  955.     STDMETHOD(SetGroupName)         (THIS_ DPID,LPDPNAME,DWORD) PURE;
  956.     STDMETHOD(SetPlayerData)        (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
  957.     STDMETHOD(SetPlayerName)        (THIS_ DPID,LPDPNAME,DWORD) PURE;
  958.     STDMETHOD(SetSessionDesc)       (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
  959.     /*** IDirectPlay3 methods ***/
  960.     STDMETHOD(AddGroupToGroup)      (THIS_ DPID, DPID) PURE;
  961.     STDMETHOD(CreateGroupInGroup)   (THIS_ DPID,LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
  962.     STDMETHOD(DeleteGroupFromGroup)    (THIS_ DPID,DPID) PURE;    
  963.     STDMETHOD(EnumConnections)         (THIS_ LPCGUID,LPDPENUMCONNECTIONSCALLBACK,LPVOID,DWORD) PURE;
  964.     STDMETHOD(EnumGroupsInGroup)    (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
  965.     STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD, DPID, LPVOID, LPDWORD) PURE;
  966.     STDMETHOD(InitializeConnection) (THIS_ LPVOID,DWORD) PURE;
  967.     STDMETHOD(SecureOpen)           (THIS_ LPCDPSESSIONDESC2,DWORD,LPCDPSECURITYDESC,LPCDPCREDENTIALS) PURE;
  968.     STDMETHOD(SendChatMessage)      (THIS_ DPID,DPID,DWORD,LPDPCHAT) PURE;
  969.     STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD,DPID,LPDPLCONNECTION) PURE;
  970.     STDMETHOD(StartSession)         (THIS_ DWORD,DPID) PURE;
  971.     STDMETHOD(GetGroupFlags)        (THIS_ DPID,LPDWORD) PURE;
  972.     STDMETHOD(GetGroupParent)       (THIS_ DPID,LPDPID) PURE;
  973.     STDMETHOD(GetPlayerAccount)     (THIS_ DPID, DWORD, LPVOID, LPDWORD) PURE;
  974.     STDMETHOD(GetPlayerFlags)       (THIS_ DPID,LPDWORD) PURE;
  975.     /*** IDirectPlay4 methods ***/
  976.     STDMETHOD(GetGroupOwner)        (THIS_ DPID, LPDPID) PURE;
  977.     STDMETHOD(SetGroupOwner)        (THIS_ DPID, DPID) PURE;
  978.     STDMETHOD(SendEx)               (THIS_ DPID, DPID, DWORD, LPVOID, DWORD, DWORD, DWORD, LPVOID, DWORD_PTR *) PURE;
  979.     STDMETHOD(GetMessageQueue)      (THIS_ DPID, DPID, DWORD, LPDWORD, LPDWORD) PURE;
  980.     STDMETHOD(CancelMessage)        (THIS_ DWORD, DWORD) PURE;
  981.     STDMETHOD(CancelPriority)       (THIS_ DWORD, DWORD, DWORD) PURE;
  982. };
  983.  
  984. /****************************************************************************
  985.  *
  986.  * IDirectPlayX interface macros (for IDirectPlay4 and beyond)
  987.  *
  988.  ****************************************************************************/
  989.  
  990. #if !defined(__cplusplus) || defined(CINTERFACE)
  991.  
  992. #define IDirectPlayX_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
  993. #define IDirectPlayX_AddRef(p)                      (p)->lpVtbl->AddRef(p)
  994. #define IDirectPlayX_Release(p)                     (p)->lpVtbl->Release(p)
  995. #define IDirectPlayX_AddPlayerToGroup(p,a,b)        (p)->lpVtbl->AddPlayerToGroup(p,a,b)
  996. #define IDirectPlayX_CancelMessage(p,a,b)           (p)->lpVtbl->CancelMessage(p,a,b)
  997. #define IDirectPlayX_CancelPriority(p,a,b,c)        (p)->lpVtbl->CancelPriority(p,a,b,c)
  998. #define IDirectPlayX_Close(p)                       (p)->lpVtbl->Close(p)
  999. #define IDirectPlayX_CreateGroup(p,a,b,c,d,e)       (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
  1000. #define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f)    (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
  1001. #define IDirectPlayX_DeletePlayerFromGroup(p,a,b)   (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
  1002. #define IDirectPlayX_DestroyGroup(p,a)              (p)->lpVtbl->DestroyGroup(p,a)
  1003. #define IDirectPlayX_DestroyPlayer(p,a)             (p)->lpVtbl->DestroyPlayer(p,a)
  1004. #define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e)  (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
  1005. #define IDirectPlayX_EnumGroups(p,a,b,c,d)          (p)->lpVtbl->EnumGroups(p,a,b,c,d)
  1006. #define IDirectPlayX_EnumPlayers(p,a,b,c,d)         (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
  1007. #define IDirectPlayX_EnumSessions(p,a,b,c,d,e)      (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
  1008. #define IDirectPlayX_GetCaps(p,a,b)                 (p)->lpVtbl->GetCaps(p,a,b)
  1009. #define IDirectPlayX_GetMessageCount(p,a,b)         (p)->lpVtbl->GetMessageCount(p,a,b)
  1010. #define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e)   (p)->lpVtbl->GetMessageQueue(p,a,b,c,d,e)
  1011. #define IDirectPlayX_GetGroupData(p,a,b,c,d)        (p)->lpVtbl->GetGroupData(p,a,b,c,d)
  1012. #define IDirectPlayX_GetGroupName(p,a,b,c)          (p)->lpVtbl->GetGroupName(p,a,b,c)
  1013. #define IDirectPlayX_GetPlayerAddress(p,a,b,c)      (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
  1014. #define IDirectPlayX_GetPlayerCaps(p,a,b,c)         (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
  1015. #define IDirectPlayX_GetPlayerData(p,a,b,c,d)       (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
  1016. #define IDirectPlayX_GetPlayerName(p,a,b,c)         (p)->lpVtbl->GetPlayerName(p,a,b,c)
  1017. #define IDirectPlayX_GetSessionDesc(p,a,b)          (p)->lpVtbl->GetSessionDesc(p,a,b)
  1018. #define IDirectPlayX_Initialize(p,a)                (p)->lpVtbl->Initialize(p,a)
  1019. #define IDirectPlayX_Open(p,a,b)                    (p)->lpVtbl->Open(p,a,b)
  1020. #define IDirectPlayX_Receive(p,a,b,c,d,e)           (p)->lpVtbl->Receive(p,a,b,c,d,e)
  1021. #define IDirectPlayX_Send(p,a,b,c,d,e)              (p)->lpVtbl->Send(p,a,b,c,d,e)
  1022. #define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i)    (p)->lpVtbl->SendEx(p,a,b,c,d,e,f,g,h,i)
  1023. #define IDirectPlayX_SetGroupData(p,a,b,c,d)        (p)->lpVtbl->SetGroupData(p,a,b,c,d)
  1024. #define IDirectPlayX_SetGroupName(p,a,b,c)          (p)->lpVtbl->SetGroupName(p,a,b,c)
  1025. #define IDirectPlayX_SetPlayerData(p,a,b,c,d)       (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
  1026. #define IDirectPlayX_SetPlayerName(p,a,b,c)         (p)->lpVtbl->SetPlayerName(p,a,b,c)
  1027. #define IDirectPlayX_SetSessionDesc(p,a,b)          (p)->lpVtbl->SetSessionDesc(p,a,b)
  1028. #define IDirectPlayX_AddGroupToGroup(p,a,b)         (p)->lpVtbl->AddGroupToGroup(p,a,b)
  1029. #define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)
  1030. #define IDirectPlayX_DeleteGroupFromGroup(p,a,b)       (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)
  1031. #define IDirectPlayX_EnumConnections(p,a,b,c,d)     (p)->lpVtbl->EnumConnections(p,a,b,c,d)
  1032. #define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)
  1033. #define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)
  1034. #define IDirectPlayX_InitializeConnection(p,a,b)     (p)->lpVtbl->InitializeConnection(p,a,b)
  1035. #define IDirectPlayX_SecureOpen(p,a,b,c,d)          (p)->lpVtbl->SecureOpen(p,a,b,c,d)
  1036. #define IDirectPlayX_SendChatMessage(p,a,b,c,d)     (p)->lpVtbl->SendChatMessage(p,a,b,c,d)
  1037. #define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)
  1038. #define IDirectPlayX_StartSession(p,a,b)            (p)->lpVtbl->StartSession(p,a,b)
  1039. #define IDirectPlayX_GetGroupFlags(p,a,b)           (p)->lpVtbl->GetGroupFlags(p,a,b)
  1040. #define IDirectPlayX_GetGroupParent(p,a,b)          (p)->lpVtbl->GetGroupParent(p,a,b)
  1041. #define IDirectPlayX_GetPlayerAccount(p,a,b,c,d)    (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)
  1042. #define IDirectPlayX_GetPlayerFlags(p,a,b)          (p)->lpVtbl->GetPlayerFlags(p,a,b)
  1043. #define IDirectPlayX_GetGroupOwner(p,a,b)           (p)->lpVtbl->GetGroupOwner(p,a,b)
  1044. #define IDirectPlayX_SetGroupOwner(p,a,b)           (p)->lpVtbl->SetGroupOwner(p,a,b)
  1045.  
  1046. #else /* C++ */
  1047.  
  1048. #define IDirectPlayX_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)
  1049. #define IDirectPlayX_AddRef(p)                      (p)->AddRef()
  1050. #define IDirectPlayX_Release(p)                     (p)->Release()
  1051. #define IDirectPlayX_AddPlayerToGroup(p,a,b)        (p)->AddPlayerToGroup(a,b)
  1052. #define IDirectPlayX_CancelMessage(p,a,b)           (p)->CancelMessage(a,b)
  1053. #define IDirectPlayX_CancelPriority(p,a,b,c)        (p)->CancelPriority(a,b,c)
  1054. #define IDirectPlayX_Close(p)                       (p)->Close()
  1055. #define IDirectPlayX_CreateGroup(p,a,b,c,d,e)       (p)->CreateGroup(a,b,c,d,e)
  1056. #define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f)    (p)->CreatePlayer(a,b,c,d,e,f)
  1057. #define IDirectPlayX_DeletePlayerFromGroup(p,a,b)   (p)->DeletePlayerFromGroup(a,b)
  1058. #define IDirectPlayX_DestroyGroup(p,a)              (p)->DestroyGroup(a)
  1059. #define IDirectPlayX_DestroyPlayer(p,a)             (p)->DestroyPlayer(a)
  1060. #define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e)  (p)->EnumGroupPlayers(a,b,c,d,e)
  1061. #define IDirectPlayX_EnumGroups(p,a,b,c,d)          (p)->EnumGroups(a,b,c,d)
  1062. #define IDirectPlayX_EnumPlayers(p,a,b,c,d)         (p)->EnumPlayers(a,b,c,d)
  1063. #define IDirectPlayX_EnumSessions(p,a,b,c,d,e)      (p)->EnumSessions(a,b,c,d,e)
  1064. #define IDirectPlayX_GetCaps(p,a,b)                 (p)->GetCaps(a,b)
  1065. #define IDirectPlayX_GetMessageCount(p,a,b)         (p)->GetMessageCount(a,b)
  1066. #define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e)   (p)->GetMessageQueue(a,b,c,d,e)
  1067. #define IDirectPlayX_GetGroupData(p,a,b,c,d)        (p)->GetGroupData(a,b,c,d)
  1068. #define IDirectPlayX_GetGroupName(p,a,b,c)          (p)->GetGroupName(a,b,c)
  1069. #define IDirectPlayX_GetPlayerAddress(p,a,b,c)      (p)->GetPlayerAddress(a,b,c)
  1070. #define IDirectPlayX_GetPlayerCaps(p,a,b,c)         (p)->GetPlayerCaps(a,b,c)
  1071. #define IDirectPlayX_GetPlayerData(p,a,b,c,d)       (p)->GetPlayerData(a,b,c,d)
  1072. #define IDirectPlayX_GetPlayerName(p,a,b,c)         (p)->GetPlayerName(a,b,c)
  1073. #define IDirectPlayX_GetSessionDesc(p,a,b)          (p)->GetSessionDesc(a,b)
  1074. #define IDirectPlayX_Initialize(p,a)                (p)->Initialize(a)
  1075. #define IDirectPlayX_Open(p,a,b)                    (p)->Open(a,b)
  1076. #define IDirectPlayX_Receive(p,a,b,c,d,e)           (p)->Receive(a,b,c,d,e)
  1077. #define IDirectPlayX_Send(p,a,b,c,d,e)              (p)->Send(a,b,c,d,e)
  1078. #define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i)    (p)->SendEx(a,b,c,d,e,f,g,h,i)
  1079. #define IDirectPlayX_SetGroupData(p,a,b,c,d)        (p)->SetGroupData(a,b,c,d)
  1080. #define IDirectPlayX_SetGroupName(p,a,b,c)          (p)->SetGroupName(a,b,c)
  1081. #define IDirectPlayX_SetPlayerData(p,a,b,c,d)       (p)->SetPlayerData(a,b,c,d)
  1082. #define IDirectPlayX_SetPlayerName(p,a,b,c)         (p)->SetPlayerName(a,b,c)
  1083. #define IDirectPlayX_SetSessionDesc(p,a,b)          (p)->SetSessionDesc(a,b)
  1084. #define IDirectPlayX_AddGroupToGroup(p,a,b)         (p)->AddGroupToGroup(a,b)
  1085. #define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f)
  1086. #define IDirectPlayX_DeleteGroupFromGroup(p,a,b)       (p)->DeleteGroupFromGroup(a,b)
  1087. #define IDirectPlayX_EnumConnections(p,a,b,c,d)     (p)->EnumConnections(a,b,c,d)
  1088. #define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e)
  1089. #define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)
  1090. #define IDirectPlayX_InitializeConnection(p,a,b)    (p)->InitializeConnection(a,b)
  1091. #define IDirectPlayX_SecureOpen(p,a,b,c,d)          (p)->SecureOpen(a,b,c,d)
  1092. #define IDirectPlayX_SendChatMessage(p,a,b,c,d)     (p)->SendChatMessage(a,b,c,d)
  1093. #define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c)
  1094. #define IDirectPlayX_StartSession(p,a,b)            (p)->StartSession(a,b)
  1095. #define IDirectPlayX_GetGroupFlags(p,a,b)           (p)->GetGroupFlags(a,b)
  1096. #define IDirectPlayX_GetGroupParent(p,a,b)          (p)->GetGroupParent(a,b)
  1097. #define IDirectPlayX_GetPlayerAccount(p,a,b,c,d)    (p)->GetPlayerAccount(a,b,c,d)
  1098. #define IDirectPlayX_GetPlayerFlags(p,a,b)          (p)->GetPlayerFlags(a,b)
  1099. #define IDirectPlayX_GetGroupOwner(p,a,b)           (p)->GetGroupOwner(a,b)
  1100. #define IDirectPlayX_SetGroupOwner(p,a,b)           (p)->SetGroupOwner(a,b)
  1101.  
  1102. #endif
  1103.  
  1104. /****************************************************************************
  1105.  *
  1106.  * EnumConnections API flags
  1107.  *
  1108.  ****************************************************************************/
  1109.  
  1110. /*
  1111.  * Enumerate Service Providers
  1112.  */
  1113. #define DPCONNECTION_DIRECTPLAY      0x00000001
  1114.  
  1115. /*
  1116.  * Enumerate Lobby Providers
  1117.  */
  1118. #define DPCONNECTION_DIRECTPLAYLOBBY 0x00000002
  1119.  
  1120.  
  1121. /****************************************************************************
  1122.  *
  1123.  * EnumPlayers API flags
  1124.  *
  1125.  ****************************************************************************/
  1126.  
  1127. /*
  1128.  * Enumerate all players in the current session
  1129.  */
  1130. #define DPENUMPLAYERS_ALL           0x00000000
  1131. #define DPENUMGROUPS_ALL            DPENUMPLAYERS_ALL
  1132.  
  1133.  
  1134. /*
  1135.  * Enumerate only local (created by this application) players
  1136.  * or groups
  1137.  */
  1138. #define DPENUMPLAYERS_LOCAL         0x00000008
  1139. #define DPENUMGROUPS_LOCAL            DPENUMPLAYERS_LOCAL
  1140.  
  1141. /*
  1142.  * Enumerate only remote (non-local) players
  1143.  * or groups
  1144.  */
  1145. #define DPENUMPLAYERS_REMOTE        0x00000010
  1146. #define DPENUMGROUPS_REMOTE            DPENUMPLAYERS_REMOTE
  1147.  
  1148. /*
  1149.  * Enumerate groups along with the players
  1150.  */
  1151. #define DPENUMPLAYERS_GROUP         0x00000020
  1152.  
  1153. /*
  1154.  * Enumerate players or groups in another session 
  1155.  * (must supply lpguidInstance)
  1156.  */
  1157. #define DPENUMPLAYERS_SESSION       0x00000080
  1158. #define DPENUMGROUPS_SESSION        DPENUMPLAYERS_SESSION
  1159.  
  1160. /*
  1161.  * Enumerate server players
  1162.  */
  1163. #define DPENUMPLAYERS_SERVERPLAYER  0x00000100
  1164.  
  1165. /*
  1166.  * Enumerate spectator players
  1167.  */
  1168. #define DPENUMPLAYERS_SPECTATOR     0x00000200
  1169.  
  1170. /*
  1171.  * Enumerate shortcut groups
  1172.  */
  1173. #define DPENUMGROUPS_SHORTCUT       0x00000400
  1174.  
  1175. /*
  1176.  * Enumerate staging area groups
  1177.  */
  1178. #define DPENUMGROUPS_STAGINGAREA    0x00000800
  1179.  
  1180. /*
  1181.  * Enumerate hidden groups
  1182.  */
  1183. #define DPENUMGROUPS_HIDDEN         0x00001000
  1184.  
  1185. /*
  1186.  * Enumerate the group's owner
  1187.  */
  1188. #define DPENUMPLAYERS_OWNER            0x00002000
  1189.  
  1190.  
  1191. /****************************************************************************
  1192.  *
  1193.  * CreatePlayer API flags
  1194.  *
  1195.  ****************************************************************************/
  1196.  
  1197. /*
  1198.  * This flag indicates that this player should be designated
  1199.  * the server player. The app should specify this at CreatePlayer.
  1200.  */
  1201. #define DPPLAYER_SERVERPLAYER           DPENUMPLAYERS_SERVERPLAYER
  1202.  
  1203. /*
  1204.  * This flag indicates that this player should be designated
  1205.  * a spectator. The app should specify this at CreatePlayer.
  1206.  */
  1207. #define DPPLAYER_SPECTATOR              DPENUMPLAYERS_SPECTATOR
  1208.  
  1209. /*
  1210.  * This flag indicates that this player was created locally.
  1211.  * (returned from GetPlayerFlags)
  1212.  */
  1213. #define DPPLAYER_LOCAL                  DPENUMPLAYERS_LOCAL
  1214.  
  1215. /*
  1216.  * This flag indicates that this player is the group's owner
  1217.  * (Only returned in EnumGroupPlayers)
  1218.  */
  1219. #define DPPLAYER_OWNER                   DPENUMPLAYERS_OWNER
  1220.  
  1221. /****************************************************************************
  1222.  *
  1223.  * CreateGroup API flags
  1224.  *
  1225.  ****************************************************************************/
  1226.  
  1227.  
  1228. /*
  1229.  * This flag indicates that the StartSession can be called on the group.
  1230.  * The app should specify this at CreateGroup, or CreateGroupInGroup.
  1231.  */
  1232. #define DPGROUP_STAGINGAREA             DPENUMGROUPS_STAGINGAREA
  1233.  
  1234. /*
  1235.  * This flag indicates that this group was created locally.
  1236.  * (returned from GetGroupFlags)
  1237.  */
  1238. #define DPGROUP_LOCAL                   DPENUMGROUPS_LOCAL
  1239.  
  1240. /*
  1241.  * This flag indicates that this group was created hidden.
  1242.  */
  1243. #define DPGROUP_HIDDEN                   DPENUMGROUPS_HIDDEN
  1244.  
  1245.  
  1246. /****************************************************************************
  1247.  *
  1248.  * EnumSessions API flags
  1249.  *
  1250.  ****************************************************************************/
  1251.  
  1252. /*
  1253.  * Enumerate sessions which can be joined
  1254.  */
  1255. #define DPENUMSESSIONS_AVAILABLE    0x00000001 
  1256.  
  1257. /*
  1258.  * Enumerate all sessions even if they can't be joined.
  1259.  */
  1260. #define DPENUMSESSIONS_ALL          0x00000002
  1261.  
  1262.  
  1263. /*
  1264.  * Start an asynchronous enum sessions
  1265.  */
  1266.  #define DPENUMSESSIONS_ASYNC        0x00000010
  1267.  
  1268. /*
  1269.  * Stop an asynchronous enum sessions
  1270.  */
  1271.  #define DPENUMSESSIONS_STOPASYNC    0x00000020
  1272.  
  1273. /*
  1274.  * Enumerate sessions even if they require a password
  1275.  */
  1276.  #define DPENUMSESSIONS_PASSWORDREQUIRED    0x00000040
  1277.  
  1278. /*
  1279.  * Return status about progress of enumeration instead of
  1280.  * showing any status dialogs.
  1281.  */
  1282.  #define DPENUMSESSIONS_RETURNSTATUS 0x00000080
  1283.  
  1284. /****************************************************************************
  1285.  *
  1286.  * GetCaps and GetPlayerCaps API flags
  1287.  *
  1288.  ****************************************************************************/
  1289.  
  1290. /*
  1291.  * The latency returned should be for guaranteed message sending.
  1292.  * Default is non-guaranteed messaging.
  1293.  */
  1294. #define DPGETCAPS_GUARANTEED        0x00000001 
  1295.  
  1296.  
  1297. /****************************************************************************
  1298.  *
  1299.  * GetGroupData, GetPlayerData API flags
  1300.  * Remote and local Group/Player data is maintained separately. 
  1301.  * Default is DPGET_REMOTE.
  1302.  *
  1303.  ****************************************************************************/
  1304.  
  1305. /*
  1306.  * Get the remote data (set by any DirectPlay object in
  1307.  * the session using DPSET_REMOTE)
  1308.  */
  1309. #define DPGET_REMOTE                0x00000000
  1310.     
  1311. /*
  1312.  * Get the local data (set by this DirectPlay object 
  1313.  * using DPSET_LOCAL)
  1314.  */
  1315. #define DPGET_LOCAL                 0x00000001
  1316.  
  1317.  
  1318. /****************************************************************************
  1319.  *
  1320.  * Open API flags
  1321.  *
  1322.  ****************************************************************************/
  1323.  
  1324. /*
  1325.  * Join the session that is described by the DPSESSIONDESC2 structure
  1326.  */
  1327. #define DPOPEN_JOIN                 0x00000001
  1328.  
  1329. /*
  1330.  * Create a new session as described by the DPSESSIONDESC2 structure
  1331.  */
  1332. #define DPOPEN_CREATE               0x00000002
  1333.  
  1334. /*
  1335.  * Return status about progress of open instead of showing
  1336.  * any status dialogs.
  1337.  */
  1338.  #define DPOPEN_RETURNSTATUS        DPENUMSESSIONS_RETURNSTATUS
  1339.  
  1340.  
  1341. /****************************************************************************
  1342.  *
  1343.  * DPLCONNECTION flags
  1344.  *
  1345.  ****************************************************************************/
  1346.  
  1347. /*
  1348.  * This application should create a new session as
  1349.  * described by the DPSESIONDESC structure
  1350.  */
  1351. #define DPLCONNECTION_CREATESESSION                    DPOPEN_CREATE
  1352.  
  1353. /*
  1354.  * This application should join the session described by 
  1355.  * the DPSESIONDESC structure with the lpAddress data
  1356.  */
  1357. #define DPLCONNECTION_JOINSESSION                    DPOPEN_JOIN
  1358.  
  1359. /****************************************************************************
  1360.  *
  1361.  * Receive API flags
  1362.  * Default is DPRECEIVE_ALL
  1363.  *
  1364.  ****************************************************************************/
  1365.  
  1366. /*
  1367.  * Get the first message in the queue
  1368.  */
  1369. #define DPRECEIVE_ALL               0x00000001
  1370.  
  1371. /*
  1372.  * Get the first message in the queue directed to a specific player 
  1373.  */
  1374. #define DPRECEIVE_TOPLAYER          0x00000002
  1375.  
  1376. /*
  1377.  * Get the first message in the queue from a specific player
  1378.  */
  1379. #define DPRECEIVE_FROMPLAYER        0x00000004
  1380.  
  1381. /*
  1382.  * Get the message but don't remove it from the queue
  1383.  */
  1384. #define DPRECEIVE_PEEK              0x00000008
  1385.  
  1386.  
  1387. /****************************************************************************
  1388.  *
  1389.  * Send API flags
  1390.  *
  1391.  ****************************************************************************/
  1392.  
  1393. /*
  1394.  * Send the message using a guaranteed send method.
  1395.  * Default is non-guaranteed.
  1396.  */
  1397. #define DPSEND_GUARANTEED           0x00000001
  1398.  
  1399.  
  1400. /*
  1401.  * This flag is obsolete. It is ignored by DirectPlay
  1402.  */
  1403. #define DPSEND_HIGHPRIORITY         0x00000002
  1404.  
  1405. /*
  1406.  * This flag is obsolete. It is ignored by DirectPlay
  1407.  */
  1408. #define DPSEND_OPENSTREAM           0x00000008
  1409.  
  1410. /*
  1411.  * This flag is obsolete. It is ignored by DirectPlay
  1412.  */
  1413. #define DPSEND_CLOSESTREAM          0x00000010
  1414.  
  1415. /*
  1416.  * Send the message digitally signed to ensure authenticity.
  1417.  */
  1418. #define DPSEND_SIGNED               0x00000020
  1419.  
  1420. /*
  1421.  * Send the message with encryption to ensure privacy.
  1422.  */
  1423. #define DPSEND_ENCRYPTED            0x00000040
  1424.  
  1425. /*
  1426.  * The message is a lobby system message
  1427.  */
  1428. #define DPSEND_LOBBYSYSTEMMESSAGE    0x00000080
  1429.  
  1430.  
  1431. /*
  1432.  * Send message asynchronously, must check caps
  1433.  * before using this flag.  It is always provided
  1434.  * if the protocol flag is set.
  1435.  */
  1436. #define DPSEND_ASYNC                0x00000200
  1437.  
  1438. /*
  1439.  * When an message is completed, don't tell me. 
  1440.  * by default the application is notified with a system message.
  1441.  */
  1442. #define DPSEND_NOSENDCOMPLETEMSG    0x00000400
  1443.  
  1444.  
  1445. /*
  1446.  * Maximum priority for sends available to applications
  1447.  */
  1448. #define DPSEND_MAX_PRI              0x0000FFFF
  1449. #define DPSEND_MAX_PRIORITY         DPSEND_MAX_PRI
  1450.  
  1451.  
  1452. /****************************************************************************
  1453.  *
  1454.  * SetGroupData, SetGroupName, SetPlayerData, SetPlayerName,
  1455.  * SetSessionDesc API flags.
  1456.  * Default is DPSET_REMOTE.
  1457.  *
  1458.  ****************************************************************************/
  1459.  
  1460. /* 
  1461.  * Propagate the data to all players in the session
  1462.  */
  1463. #define DPSET_REMOTE                0x00000000
  1464.  
  1465. /*
  1466.  * Do not propagate the data to other players
  1467.  */
  1468. #define DPSET_LOCAL                 0x00000001
  1469.  
  1470. /*
  1471.  * Used with DPSET_REMOTE, use guaranteed message send to
  1472.  * propagate the data
  1473.  */
  1474. #define DPSET_GUARANTEED            0x00000002
  1475.  
  1476. /****************************************************************************
  1477.  *
  1478.  * GetMessageQueue API flags.
  1479.  * Default is DPMESSAGEQUEUE_SEND
  1480.  *
  1481.  ****************************************************************************/
  1482.  
  1483. /* 
  1484.  * Get Send Queue - requires Service Provider Support
  1485.  */
  1486. #define DPMESSAGEQUEUE_SEND            0x00000001
  1487.  
  1488. /*
  1489.  * Get Receive Queue
  1490.  */
  1491. #define DPMESSAGEQUEUE_RECEIVE      0x00000002
  1492.  
  1493.  
  1494. /****************************************************************************
  1495.  *
  1496.  * Connect API flags
  1497.  *
  1498.  ****************************************************************************/
  1499.  
  1500.  
  1501. /*
  1502.  * Start an asynchronous connect which returns status codes
  1503.  */
  1504. #define DPCONNECT_RETURNSTATUS      (DPENUMSESSIONS_RETURNSTATUS)
  1505.  
  1506.  
  1507. /****************************************************************************
  1508.  *
  1509.  * DirectPlay system messages and message data structures
  1510.  *
  1511.  * All system message come 'From' player DPID_SYSMSG.  To determine what type 
  1512.  * of message it is, cast the lpData from Receive to DPMSG_GENERIC and check
  1513.  * the dwType member against one of the following DPSYS_xxx constants. Once
  1514.  * a match is found, cast the lpData to the corresponding of the DPMSG_xxx
  1515.  * structures to access the data of the message.
  1516.  *
  1517.  ****************************************************************************/
  1518.  
  1519. /*
  1520.  * A new player or group has been created in the session
  1521.  * Use DPMSG_CREATEPLAYERORGROUP.  Check dwPlayerType to see if it
  1522.  * is a player or a group.
  1523.  */
  1524. #define DPSYS_CREATEPLAYERORGROUP   0x0003  
  1525.  
  1526. /*
  1527.  * A player has been deleted from the session
  1528.  * Use DPMSG_DESTROYPLAYERORGROUP
  1529.  */
  1530. #define DPSYS_DESTROYPLAYERORGROUP  0x0005  
  1531.  
  1532. /*
  1533.  * A player has been added to a group
  1534.  * Use DPMSG_ADDPLAYERTOGROUP
  1535.  */
  1536. #define DPSYS_ADDPLAYERTOGROUP      0x0007  
  1537.  
  1538. /*
  1539.  * A player has been removed from a group
  1540.  * Use DPMSG_DELETEPLAYERFROMGROUP
  1541.  */
  1542. #define DPSYS_DELETEPLAYERFROMGROUP 0x0021  
  1543.  
  1544. /*
  1545.  * This DirectPlay object lost its connection with all the
  1546.  * other players in the session.
  1547.  * Use DPMSG_SESSIONLOST.
  1548.  */
  1549. #define DPSYS_SESSIONLOST           0x0031
  1550.  
  1551. /*
  1552.  * The current host has left the session.
  1553.  * This DirectPlay object is now the host.
  1554.  * Use DPMSG_HOST.
  1555.  */
  1556. #define DPSYS_HOST                  0x0101
  1557.  
  1558. /*
  1559.  * The remote data associated with a player or
  1560.  * group has changed. Check dwPlayerType to see
  1561.  * if it is a player or a group
  1562.  * Use DPMSG_SETPLAYERORGROUPDATA
  1563.  */
  1564. #define DPSYS_SETPLAYERORGROUPDATA  0x0102
  1565.  
  1566. /*
  1567.  * The name of a player or group has changed.
  1568.  * Check dwPlayerType to see if it is a player
  1569.  * or a group.
  1570.  * Use DPMSG_SETPLAYERORGROUPNAME
  1571.  */
  1572. #define DPSYS_SETPLAYERORGROUPNAME  0x0103
  1573.  
  1574. /*
  1575.  * The session description has changed.
  1576.  * Use DPMSG_SETSESSIONDESC
  1577.  */
  1578. #define DPSYS_SETSESSIONDESC        0x0104
  1579.  
  1580. /*
  1581.  * A group has been added to a group
  1582.  * Use DPMSG_ADDGROUPTOGROUP
  1583.  */
  1584. #define DPSYS_ADDGROUPTOGROUP          0x0105  
  1585.  
  1586. /*
  1587.  * A group has been removed from a group
  1588.  * Use DPMSG_DELETEGROUPFROMGROUP
  1589.  */
  1590. #define DPSYS_DELETEGROUPFROMGROUP     0x0106
  1591.  
  1592. /*
  1593.  * A secure player-player message has arrived.
  1594.  * Use DPMSG_SECUREMESSAGE
  1595.  */
  1596. #define DPSYS_SECUREMESSAGE         0x0107
  1597.  
  1598. /*
  1599.  * Start a new session.
  1600.  * Use DPMSG_STARTSESSION
  1601.  */
  1602. #define DPSYS_STARTSESSION          0x0108
  1603.  
  1604. /*
  1605.  * A chat message has arrived
  1606.  * Use DPMSG_CHAT
  1607.  */
  1608. #define DPSYS_CHAT                  0x0109
  1609.  
  1610. /*
  1611.  * The owner of a group has changed
  1612.  * Use DPMSG_SETGROUPOWNER
  1613.  */
  1614. #define DPSYS_SETGROUPOWNER         0x010A
  1615.  
  1616. /*
  1617.  * An async send has finished, failed or been cancelled
  1618.  * Use DPMSG_SENDCOMPLETE
  1619.  */
  1620. #define DPSYS_SENDCOMPLETE          0x010d
  1621.  
  1622.  
  1623. /*
  1624.  * Used in the dwPlayerType field to indicate if it applies to a group
  1625.  * or a player
  1626.  */
  1627. #define DPPLAYERTYPE_GROUP          0x00000000
  1628. #define DPPLAYERTYPE_PLAYER         0x00000001
  1629.  
  1630.  
  1631. /*
  1632.  * DPMSG_GENERIC
  1633.  * Generic message structure used to identify the message type.
  1634.  */
  1635. typedef struct
  1636. {
  1637.     DWORD       dwType;         // Message type
  1638. } DPMSG_GENERIC, FAR *LPDPMSG_GENERIC;
  1639.  
  1640. /*
  1641.  * DPMSG_CREATEPLAYERORGROUP
  1642.  * System message generated when a new player or group
  1643.  * created in the session with information about it.
  1644.  */
  1645. typedef struct
  1646. {
  1647.     DWORD       dwType;         // Message type
  1648.     DWORD       dwPlayerType;   // Is it a player or group
  1649.     DPID        dpId;           // ID of the player or group
  1650.     DWORD       dwCurrentPlayers;   // current # players & groups in session
  1651.     LPVOID      lpData;         // pointer to remote data
  1652.     DWORD       dwDataSize;     // size of remote data
  1653.     DPNAME      dpnName;        // structure with name info
  1654.     // the following fields are only available when using
  1655.     // the IDirectPlay3 interface or greater
  1656.     DPID        dpIdParent;     // id of parent group
  1657.     DWORD        dwFlags;        // player or group flags
  1658. } DPMSG_CREATEPLAYERORGROUP, FAR *LPDPMSG_CREATEPLAYERORGROUP;
  1659.  
  1660. /*
  1661.  * DPMSG_DESTROYPLAYERORGROUP
  1662.  * System message generated when a player or group is being
  1663.  * destroyed in the session with information about it.
  1664.  */
  1665. typedef struct
  1666. {
  1667.     DWORD       dwType;         // Message type
  1668.     DWORD       dwPlayerType;   // Is it a player or group
  1669.     DPID        dpId;           // player ID being deleted
  1670.     LPVOID      lpLocalData;    // copy of players local data
  1671.     DWORD       dwLocalDataSize; // sizeof local data
  1672.     LPVOID      lpRemoteData;   // copy of players remote data
  1673.     DWORD       dwRemoteDataSize; // sizeof remote data
  1674.     // the following fields are only available when using
  1675.     // the IDirectPlay3 interface or greater
  1676.     DPNAME      dpnName;        // structure with name info
  1677.     DPID        dpIdParent;     // id of parent group    
  1678.     DWORD        dwFlags;        // player or group flags
  1679. } DPMSG_DESTROYPLAYERORGROUP, FAR *LPDPMSG_DESTROYPLAYERORGROUP;
  1680.  
  1681. /*
  1682.  * DPMSG_ADDPLAYERTOGROUP
  1683.  * System message generated when a player is being added
  1684.  * to a group.
  1685.  */
  1686. typedef struct
  1687. {
  1688.     DWORD       dwType;         // Message type
  1689.     DPID        dpIdGroup;      // group ID being added to
  1690.     DPID        dpIdPlayer;     // player ID being added
  1691. } DPMSG_ADDPLAYERTOGROUP, FAR *LPDPMSG_ADDPLAYERTOGROUP;
  1692.  
  1693. /*
  1694.  * DPMSG_DELETEPLAYERFROMGROUP
  1695.  * System message generated when a player is being
  1696.  * removed from a group
  1697.  */
  1698. typedef DPMSG_ADDPLAYERTOGROUP          DPMSG_DELETEPLAYERFROMGROUP;
  1699. typedef DPMSG_DELETEPLAYERFROMGROUP     FAR *LPDPMSG_DELETEPLAYERFROMGROUP;
  1700.  
  1701. /*
  1702.  * DPMSG_ADDGROUPTOGROUP
  1703.  * System message generated when a group is being added
  1704.  * to a group.
  1705.  */
  1706. typedef struct
  1707. {
  1708.     DWORD       dwType;         // Message type
  1709.     DPID        dpIdParentGroup; // group ID being added to
  1710.     DPID        dpIdGroup;     // group ID being added
  1711. } DPMSG_ADDGROUPTOGROUP, FAR *LPDPMSG_ADDGROUPTOGROUP;
  1712.  
  1713. /*
  1714.  * DPMSG_DELETEGROUPFROMGROUP
  1715.  * System message generated when a GROUP is being
  1716.  * removed from a group
  1717.  */
  1718. typedef DPMSG_ADDGROUPTOGROUP          DPMSG_DELETEGROUPFROMGROUP;
  1719. typedef DPMSG_DELETEGROUPFROMGROUP     FAR *LPDPMSG_DELETEGROUPFROMGROUP;
  1720.  
  1721. /*
  1722.  * DPMSG_SETPLAYERORGROUPDATA
  1723.  * System message generated when remote data for a player or
  1724.  * group has changed.
  1725.  */
  1726. typedef struct
  1727. {
  1728.     DWORD       dwType;         // Message type
  1729.     DWORD       dwPlayerType;   // Is it a player or group
  1730.     DPID        dpId;           // ID of player or group
  1731.     LPVOID      lpData;         // pointer to remote data
  1732.     DWORD       dwDataSize;     // size of remote data
  1733. } DPMSG_SETPLAYERORGROUPDATA, FAR *LPDPMSG_SETPLAYERORGROUPDATA;
  1734.  
  1735. /*
  1736.  * DPMSG_SETPLAYERORGROUPNAME
  1737.  * System message generated when the name of a player or
  1738.  * group has changed.
  1739.  */
  1740. typedef struct
  1741. {
  1742.     DWORD       dwType;         // Message type
  1743.     DWORD       dwPlayerType;   // Is it a player or group
  1744.     DPID        dpId;           // ID of player or group
  1745.     DPNAME      dpnName;        // structure with new name info
  1746. } DPMSG_SETPLAYERORGROUPNAME, FAR *LPDPMSG_SETPLAYERORGROUPNAME;
  1747.  
  1748. /*
  1749.  * DPMSG_SETSESSIONDESC
  1750.  * System message generated when session desc has changed
  1751.  */
  1752. typedef struct
  1753. {
  1754.     DWORD           dwType;     // Message type
  1755.     DPSESSIONDESC2  dpDesc;     // Session desc
  1756. } DPMSG_SETSESSIONDESC, FAR *LPDPMSG_SETSESSIONDESC;
  1757.  
  1758. /*
  1759.  * DPMSG_HOST
  1760.  * System message generated when the host has migrated to this
  1761.  * DirectPlay object.
  1762.  *
  1763.  */
  1764. typedef DPMSG_GENERIC       DPMSG_HOST;
  1765. typedef DPMSG_HOST          FAR *LPDPMSG_HOST;
  1766.  
  1767. /*
  1768.  * DPMSG_SESSIONLOST
  1769.  * System message generated when the connection to the session is lost.
  1770.  *
  1771.  */
  1772. typedef DPMSG_GENERIC       DPMSG_SESSIONLOST;
  1773. typedef DPMSG_SESSIONLOST   FAR *LPDPMSG_SESSIONLOST;
  1774.  
  1775. /*
  1776.  * DPMSG_SECUREMESSAGE
  1777.  * System message generated when a player requests a secure send
  1778.  */
  1779. typedef struct 
  1780. {
  1781.     DWORD        dwType;         // Message Type
  1782.     DWORD        dwFlags;        // Signed/Encrypted
  1783.     DPID        dpIdFrom;       // ID of Sending Player
  1784.     LPVOID        lpData;         // Player message
  1785.     DWORD        dwDataSize;     // Size of player message
  1786. } DPMSG_SECUREMESSAGE, FAR *LPDPMSG_SECUREMESSAGE;
  1787.  
  1788. /*
  1789.  * DPMSG_STARTSESSION
  1790.  * System message containing all information required to 
  1791.  * start a new session
  1792.  */
  1793. typedef struct
  1794. {
  1795.     DWORD              dwType;     // Message type
  1796.     LPDPLCONNECTION    lpConn;     // DPLCONNECTION structure
  1797. } DPMSG_STARTSESSION, FAR *LPDPMSG_STARTSESSION;
  1798.  
  1799. /*
  1800.  * DPMSG_CHAT
  1801.  * System message containing a chat message
  1802.  */
  1803. typedef struct
  1804. {
  1805.     DWORD                  dwType;           // Message type
  1806.     DWORD                  dwFlags;          // Message flags
  1807.     DPID                   idFromPlayer;     // ID of the Sending Player
  1808.     DPID                   idToPlayer;       // ID of the To Player
  1809.     DPID                   idToGroup;        // ID of the To Group
  1810.     LPDPCHAT             lpChat;            // Pointer to a structure containing the chat message
  1811. } DPMSG_CHAT, FAR *LPDPMSG_CHAT;
  1812.  
  1813. /*
  1814.  * DPMSG_SETGROUPOWNER
  1815.  * System message generated when the owner of a group has changed
  1816.  */
  1817. typedef struct
  1818. {
  1819.     DWORD       dwType;         // Message type
  1820.     DPID        idGroup;        // ID of the group
  1821.     DPID        idNewOwner;     // ID of the player that is the new owner
  1822.     DPID        idOldOwner;     // ID of the player that used to be the owner
  1823. } DPMSG_SETGROUPOWNER, FAR *LPDPMSG_SETGROUPOWNER;
  1824.  
  1825. /*
  1826.  * DPMSG_SENDCOMPLETE
  1827.  * System message generated when finished with an Async Send message
  1828.  *
  1829.  * NOTE SENDPARMS has an overlay for DPMSG_SENDCOMPLETE, don't
  1830.  *                change this message w/o changing SENDPARMS.
  1831.  */
  1832. typedef struct
  1833. {
  1834.     DWORD         dwType;
  1835.     DPID        idFrom;
  1836.     DPID        idTo;
  1837.     DWORD        dwFlags;
  1838.     DWORD        dwPriority;
  1839.     DWORD        dwTimeout;
  1840.     LPVOID        lpvContext;
  1841.     DWORD        dwMsgID;
  1842.     HRESULT     hr;
  1843.     DWORD       dwSendTime;
  1844. } DPMSG_SENDCOMPLETE, *LPDPMSG_SENDCOMPLETE;
  1845.  
  1846. /****************************************************************************
  1847.  *
  1848.  * DIRECTPLAY ERRORS
  1849.  *
  1850.  * Errors are represented by negative values and cannot be combined.
  1851.  *
  1852.  ****************************************************************************/
  1853. #define DP_OK                           S_OK
  1854. #define DPERR_ALREADYINITIALIZED        MAKE_DPHRESULT(   5 )
  1855. #define DPERR_ACCESSDENIED              MAKE_DPHRESULT(  10 )
  1856. #define DPERR_ACTIVEPLAYERS             MAKE_DPHRESULT(  20 )
  1857. #define DPERR_BUFFERTOOSMALL            MAKE_DPHRESULT(  30 )
  1858. #define DPERR_CANTADDPLAYER             MAKE_DPHRESULT(  40 )
  1859. #define DPERR_CANTCREATEGROUP           MAKE_DPHRESULT(  50 )
  1860. #define DPERR_CANTCREATEPLAYER          MAKE_DPHRESULT(  60 )
  1861. #define DPERR_CANTCREATESESSION         MAKE_DPHRESULT(  70 )
  1862. #define DPERR_CAPSNOTAVAILABLEYET       MAKE_DPHRESULT(  80 )
  1863. #define DPERR_EXCEPTION                 MAKE_DPHRESULT(  90 )
  1864. #define DPERR_GENERIC                   E_FAIL
  1865. #define DPERR_INVALIDFLAGS              MAKE_DPHRESULT( 120 )
  1866. #define DPERR_INVALIDOBJECT             MAKE_DPHRESULT( 130 )
  1867. #define DPERR_INVALIDPARAM              E_INVALIDARG
  1868. #define DPERR_INVALIDPARAMS             DPERR_INVALIDPARAM
  1869. #define DPERR_INVALIDPLAYER             MAKE_DPHRESULT( 150 )
  1870. #define DPERR_INVALIDGROUP                 MAKE_DPHRESULT( 155 )
  1871. #define DPERR_NOCAPS                    MAKE_DPHRESULT( 160 )
  1872. #define DPERR_NOCONNECTION              MAKE_DPHRESULT( 170 )
  1873. #define DPERR_NOMEMORY                  E_OUTOFMEMORY
  1874. #define DPERR_OUTOFMEMORY               DPERR_NOMEMORY
  1875. #define DPERR_NOMESSAGES                MAKE_DPHRESULT( 190 )
  1876. #define DPERR_NONAMESERVERFOUND         MAKE_DPHRESULT( 200 )
  1877. #define DPERR_NOPLAYERS                 MAKE_DPHRESULT( 210 )
  1878. #define DPERR_NOSESSIONS                MAKE_DPHRESULT( 220 )
  1879. #define DPERR_PENDING                    E_PENDING
  1880. #define DPERR_SENDTOOBIG                MAKE_DPHRESULT( 230 )
  1881. #define DPERR_TIMEOUT                   MAKE_DPHRESULT( 240 )
  1882. #define DPERR_UNAVAILABLE               MAKE_DPHRESULT( 250 )
  1883. #define DPERR_UNSUPPORTED               E_NOTIMPL
  1884. #define DPERR_BUSY                      MAKE_DPHRESULT( 270 )
  1885. #define DPERR_USERCANCEL                MAKE_DPHRESULT( 280 ) 
  1886. #define DPERR_NOINTERFACE               E_NOINTERFACE
  1887. #define DPERR_CANNOTCREATESERVER        MAKE_DPHRESULT( 290 )
  1888. #define DPERR_PLAYERLOST                MAKE_DPHRESULT( 300 )
  1889. #define DPERR_SESSIONLOST               MAKE_DPHRESULT( 310 )
  1890. #define DPERR_UNINITIALIZED             MAKE_DPHRESULT( 320 )
  1891. #define DPERR_NONEWPLAYERS              MAKE_DPHRESULT( 330 )
  1892. #define DPERR_INVALIDPASSWORD           MAKE_DPHRESULT( 340 )
  1893. #define DPERR_CONNECTING                MAKE_DPHRESULT( 350 )
  1894. #define DPERR_CONNECTIONLOST            MAKE_DPHRESULT( 360 )
  1895. #define DPERR_UNKNOWNMESSAGE            MAKE_DPHRESULT( 370 )
  1896. #define DPERR_CANCELFAILED              MAKE_DPHRESULT( 380 )
  1897. #define DPERR_INVALIDPRIORITY           MAKE_DPHRESULT( 390 )
  1898. #define DPERR_NOTHANDLED                MAKE_DPHRESULT( 400 )
  1899. #define DPERR_CANCELLED                 MAKE_DPHRESULT( 410 )
  1900. #define DPERR_ABORTED                   MAKE_DPHRESULT( 420 )
  1901.  
  1902.  
  1903. #define DPERR_BUFFERTOOLARGE            MAKE_DPHRESULT( 1000 )
  1904. #define DPERR_CANTCREATEPROCESS         MAKE_DPHRESULT( 1010 )
  1905. #define DPERR_APPNOTSTARTED             MAKE_DPHRESULT( 1020 )
  1906. #define DPERR_INVALIDINTERFACE          MAKE_DPHRESULT( 1030 )
  1907. #define DPERR_NOSERVICEPROVIDER         MAKE_DPHRESULT( 1040 )
  1908. #define DPERR_UNKNOWNAPPLICATION        MAKE_DPHRESULT( 1050 )
  1909. #define DPERR_NOTLOBBIED                MAKE_DPHRESULT( 1070 )
  1910. #define DPERR_SERVICEPROVIDERLOADED        MAKE_DPHRESULT( 1080 )
  1911. #define DPERR_ALREADYREGISTERED            MAKE_DPHRESULT( 1090 )
  1912. #define DPERR_NOTREGISTERED                MAKE_DPHRESULT( 1100 )
  1913.  
  1914. //
  1915. // Security related errors
  1916. //
  1917. #define DPERR_AUTHENTICATIONFAILED      MAKE_DPHRESULT(  2000 )
  1918. #define DPERR_CANTLOADSSPI              MAKE_DPHRESULT(  2010 )
  1919. #define DPERR_ENCRYPTIONFAILED          MAKE_DPHRESULT(  2020 )
  1920. #define DPERR_SIGNFAILED                MAKE_DPHRESULT(  2030 )
  1921. #define DPERR_CANTLOADSECURITYPACKAGE   MAKE_DPHRESULT(  2040 )
  1922. #define DPERR_ENCRYPTIONNOTSUPPORTED    MAKE_DPHRESULT(  2050 )
  1923. #define DPERR_CANTLOADCAPI              MAKE_DPHRESULT(  2060 )
  1924. #define DPERR_NOTLOGGEDIN               MAKE_DPHRESULT(  2070 )
  1925. #define DPERR_LOGONDENIED               MAKE_DPHRESULT(  2080 )
  1926.  
  1927.  
  1928. /****************************************************************************
  1929.  *
  1930.  *     dplay 1.0 obsolete structures + interfaces
  1931.  *    Included for compatibility only. New apps should
  1932.  *    use IDirectPlay2
  1933.  *
  1934.  ****************************************************************************/
  1935.  
  1936. // define this to ignore obsolete interfaces and constants
  1937. #ifndef IDIRECTPLAY2_OR_GREATER
  1938.  
  1939. #define DPOPEN_OPENSESSION          DPOPEN_JOIN
  1940. #define DPOPEN_CREATESESSION        DPOPEN_CREATE
  1941.  
  1942. #define DPENUMSESSIONS_PREVIOUS     0x00000004
  1943.  
  1944. #define DPENUMPLAYERS_PREVIOUS      0x00000004
  1945.  
  1946. #define DPSEND_GUARANTEE            DPSEND_GUARANTEED
  1947. #define DPSEND_TRYONCE              0x00000004
  1948.  
  1949. #define DPCAPS_NAMESERVICE          0x00000001
  1950. #define DPCAPS_NAMESERVER           DPCAPS_ISHOST
  1951. #define DPCAPS_GUARANTEED           0x00000004
  1952.  
  1953. #define DPLONGNAMELEN               52
  1954. #define DPSHORTNAMELEN              20
  1955. #define DPSESSIONNAMELEN            32
  1956. #define DPPASSWORDLEN               16
  1957. #define DPUSERRESERVED              16
  1958.  
  1959. #define DPSYS_ADDPLAYER             0x0003
  1960. #define DPSYS_DELETEPLAYER          0x0005
  1961.  
  1962. #define DPSYS_DELETEGROUP           0x0020
  1963. #define DPSYS_DELETEPLAYERFROMGRP   0x0021
  1964. #define DPSYS_CONNECT               0x484b
  1965.  
  1966. typedef struct
  1967. {
  1968.     DWORD       dwType;
  1969.     DWORD       dwPlayerType;
  1970.     DPID        dpId;
  1971.     char        szLongName[DPLONGNAMELEN];
  1972.     char        szShortName[DPSHORTNAMELEN];
  1973.     DWORD       dwCurrentPlayers;
  1974. }   DPMSG_ADDPLAYER;
  1975.  
  1976. typedef DPMSG_ADDPLAYER DPMSG_ADDGROUP;
  1977.  
  1978. typedef struct
  1979. {
  1980.     DWORD       dwType;
  1981.     DPID        dpIdGroup;
  1982.     DPID        dpIdPlayer;
  1983. } DPMSG_GROUPADD;
  1984.  
  1985. typedef DPMSG_GROUPADD DPMSG_GROUPDELETE;
  1986. typedef struct
  1987. {
  1988.     DWORD       dwType;
  1989.     DPID        dpId;
  1990. } DPMSG_DELETEPLAYER;
  1991.  
  1992. typedef BOOL (PASCAL *LPDPENUMPLAYERSCALLBACK)(
  1993.     DPID    dpId,
  1994.     LPSTR   lpFriendlyName,
  1995.     LPSTR   lpFormalName,
  1996.     DWORD   dwFlags,
  1997.     LPVOID  lpContext );
  1998.  
  1999. typedef struct
  2000. {
  2001.     DWORD   dwSize;
  2002.     GUID    guidSession;                  
  2003.     DWORD_PTR dwSession;                    
  2004.     DWORD   dwMaxPlayers;                 
  2005.     DWORD   dwCurrentPlayers;             
  2006.     DWORD   dwFlags;                      
  2007.     char    szSessionName[DPSESSIONNAMELEN];
  2008.     char    szUserField[DPUSERRESERVED];
  2009.     DWORD_PTR   dwReserved1;                  
  2010.     char    szPassword[DPPASSWORDLEN];    
  2011.     DWORD_PTR   dwReserved2;                  
  2012.     DWORD_PTR   dwUser1;
  2013.     DWORD_PTR   dwUser2;
  2014.     DWORD_PTR   dwUser3;
  2015.     DWORD_PTR   dwUser4;
  2016. } DPSESSIONDESC,*LPDPSESSIONDESC;
  2017.  
  2018. typedef BOOL (PASCAL * LPDPENUMSESSIONSCALLBACK)(
  2019.     LPDPSESSIONDESC lpDPSessionDesc,
  2020.     LPVOID      lpContext,
  2021.     LPDWORD     lpdwTimeOut,
  2022.     DWORD       dwFlags);
  2023.  
  2024. /*
  2025.  * IDirectPlay
  2026.  */
  2027. #undef INTERFACE
  2028. #define INTERFACE IDirectPlay
  2029. DECLARE_INTERFACE_( IDirectPlay, IUnknown )
  2030. {
  2031.     /*** IUnknown methods ***/
  2032.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  2033.     STDMETHOD_(ULONG,AddRef)        (THIS)  PURE;
  2034.     STDMETHOD_(ULONG,Release)       (THIS) PURE;
  2035.     /*** IDirectPlay methods ***/
  2036.     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
  2037.     STDMETHOD(Close)                (THIS) PURE;
  2038.     STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPSTR,LPSTR,LPHANDLE) PURE;
  2039.     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPSTR,LPSTR) PURE;
  2040.     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
  2041.     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
  2042.     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
  2043.     STDMETHOD(EnableNewPlayers)     (THIS_ BOOL) PURE;
  2044.     STDMETHOD(EnumGroupPlayers)     (THIS_ DPID, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE;
  2045.     STDMETHOD(EnumGroups)           (THIS_ DWORD_PTR, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE;
  2046.     STDMETHOD(EnumPlayers)          (THIS_ DWORD_PTR, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE;
  2047.     STDMETHOD(EnumSessions)         (THIS_ LPDPSESSIONDESC,DWORD,LPDPENUMSESSIONSCALLBACK,LPVOID,DWORD) PURE;
  2048.     STDMETHOD(GetCaps)              (THIS_ LPDPCAPS) PURE;
  2049.     STDMETHOD(GetMessageCount)      (THIS_ DPID, LPDWORD) PURE;
  2050.     STDMETHOD(GetPlayerCaps)        (THIS_ DPID, LPDPCAPS) PURE;
  2051.     STDMETHOD(GetPlayerName)        (THIS_ DPID,LPSTR,LPDWORD,LPSTR,LPDWORD) PURE;
  2052.     STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;
  2053.     STDMETHOD(Open)                 (THIS_ LPDPSESSIONDESC) PURE;
  2054.     STDMETHOD(Receive)              (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE;
  2055.     STDMETHOD(SaveSession)          (THIS_ LPSTR) PURE;
  2056.     STDMETHOD(Send)                 (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE;
  2057.     STDMETHOD(SetPlayerName)        (THIS_ DPID,LPSTR,LPSTR) PURE;
  2058. };
  2059.  
  2060. /****************************************************************************
  2061.  *
  2062.  * IDirectPlay interface macros
  2063.  *
  2064.  ****************************************************************************/
  2065.  
  2066. #if !defined(__cplusplus) || defined(CINTERFACE)
  2067.  
  2068. #define IDirectPlay_AddPlayerToGroup(p,a,b)         (p)->lpVtbl->AddPlayerToGroup(p,a,b)
  2069. #define IDirectPlay_Close(p)                        (p)->lpVtbl->Close(p)
  2070. #define IDirectPlay_CreateGroup(p,a,b,c)            (p)->lpVtbl->CreateGroup(p,a,b,c)
  2071. #define IDirectPlay_CreatePlayer(p,a,b,c,d)         (p)->lpVtbl->CreatePlayer(p,a,b,c,d)
  2072. #define IDirectPlay_DeletePlayerFromGroup(p,a,b)    (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
  2073. #define IDirectPlay_DestroyGroup(p,a)               (p)->lpVtbl->DestroyGroup(p,a)
  2074. #define IDirectPlay_DestroyPlayer(p,a)              (p)->lpVtbl->DestroyPlayer(p,a)
  2075. #define IDirectPlay_EnableNewPlayers(p,a)           (p)->lpVtbl->EnableNewPlayers(p,a)
  2076. #define IDirectPlay_EnumGroupPlayers(p,a,b,c,d)     (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d)
  2077. #define IDirectPlay_EnumGroups(p,a,b,c,d)           (p)->lpVtbl->EnumGroups(p,a,b,c,d)
  2078. #define IDirectPlay_EnumPlayers(p,a,b,c,d)          (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
  2079. #define IDirectPlay_EnumSessions(p,a,b,c,d,e)       (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
  2080. #define IDirectPlay_GetCaps(p,a)                    (p)->lpVtbl->GetCaps(p,a)
  2081. #define IDirectPlay_GetMessageCount(p,a,b)          (p)->lpVtbl->GetMessageCount(p,a,b)
  2082. #define IDirectPlay_GetPlayerCaps(p,a,b)            (p)->lpVtbl->GetPlayerCaps(p,a,b)
  2083. #define IDirectPlay_GetPlayerName(p,a,b,c,d,e)      (p)->lpVtbl->GetPlayerName(p,a,b,c,d,e)
  2084. #define IDirectPlay_Initialize(p,a)                 (p)->lpVtbl->Initialize(p,a)
  2085. #define IDirectPlay_Open(p,a)                       (p)->lpVtbl->Open(p,a)
  2086. #define IDirectPlay_Receive(p,a,b,c,d,e)            (p)->lpVtbl->Receive(p,a,b,c,d,e)
  2087. #define IDirectPlay_SaveSession(p,a)                (p)->lpVtbl->SaveSession(p,a)
  2088. #define IDirectPlay_Send(p,a,b,c,d,e)               (p)->lpVtbl->Send(p,a,b,c,d,e)
  2089. #define IDirectPlay_SetPlayerName(p,a,b,c)          (p)->lpVtbl->SetPlayerName(p,a,b,c)
  2090.  
  2091. #else /* C++ */
  2092.  
  2093. #define IDirectPlay_AddPlayerToGroup(p,a,b)         (p)->AddPlayerToGroup(a,b)
  2094. #define IDirectPlay_Close(p)                        (p)->Close()
  2095. #define IDirectPlay_CreateGroup(p,a,b,c)            (p)->CreateGroup(a,b,c)
  2096. #define IDirectPlay_CreatePlayer(p,a,b,c,d)         (p)->CreatePlayer(a,b,c,d)
  2097. #define IDirectPlay_DeletePlayerFromGroup(p,a,b)    (p)->DeletePlayerFromGroup(a,b)
  2098. #define IDirectPlay_DestroyGroup(p,a)               (p)->DestroyGroup(a)
  2099. #define IDirectPlay_DestroyPlayer(p,a)              (p)->DestroyPlayer(a)
  2100. #define IDirectPlay_EnableNewPlayers(p,a)           (p)->EnableNewPlayers(a)
  2101. #define IDirectPlay_EnumGroupPlayers(p,a,b,c,d)     (p)->EnumGroupPlayers(a,b,c,d)
  2102. #define IDirectPlay_EnumGroups(p,a,b,c,d)           (p)->EnumGroups(a,b,c,d)
  2103. #define IDirectPlay_EnumPlayers(p,a,b,c,d)          (p)->EnumPlayers(a,b,c,d)
  2104. #define IDirectPlay_EnumSessions(p,a,b,c,d,e)       (p)->EnumSessions(a,b,c,d,e)
  2105. #define IDirectPlay_GetCaps(p,a)                    (p)->GetCaps(a)
  2106. #define IDirectPlay_GetMessageCount(p,a,b)          (p)->GetMessageCount(a,b)
  2107. #define IDirectPlay_GetPlayerCaps(p,a,b)            (p)->GetPlayerCaps(a,b)
  2108. #define IDirectPlay_GetPlayerName(p,a,b,c,d,e)      (p)->GetPlayerName(a,b,c,d,e)
  2109. #define IDirectPlay_Initialize(p,a)                 (p)->Initialize(a)
  2110. #define IDirectPlay_Open(p,a)                       (p)->Open(a)
  2111. #define IDirectPlay_Receive(p,a,b,c,d,e)            (p)->Receive(a,b,c,d,e)
  2112. #define IDirectPlay_SaveSession(p,a)                (p)->SaveSession(a)
  2113. #define IDirectPlay_Send(p,a,b,c,d,e)               (p)->Send(a,b,c,d,e)
  2114. #define IDirectPlay_SetPlayerName(p,a,b,c)          (p)->SetPlayerName(a,b,c)
  2115.  
  2116. #endif
  2117.  
  2118. DEFINE_GUID(IID_IDirectPlay, 0x5454e9a0, 0xdb65, 0x11ce, 0x92, 0x1c, 0x00, 0xaa, 0x00, 0x6c, 0x49, 0x72);
  2119.  
  2120. #endif // IDIRECTPLAY2_OR_GREATER
  2121.  
  2122. /****************************************************************************
  2123.  *
  2124.  * IDirectPlay macros (included regardless of IDIRECTPLAY2_OR_GREATER flag)
  2125.  *
  2126.  ****************************************************************************/
  2127.  
  2128. #if !defined(__cplusplus) || defined(CINTERFACE)
  2129.  
  2130. #define IDirectPlay_QueryInterface(p,a,b)           (p)->lpVtbl->QueryInterface(p,a,b)
  2131. #define IDirectPlay_AddRef(p)                       (p)->lpVtbl->AddRef(p)
  2132. #define IDirectPlay_Release(p)                      (p)->lpVtbl->Release(p)
  2133.  
  2134. #else
  2135.  
  2136. #define IDirectPlay_QueryInterface(p,a,b)           (p)->QueryInterface(a,b)
  2137. #define IDirectPlay_AddRef(p)                       (p)->AddRef()
  2138. #define IDirectPlay_Release(p)                      (p)->Release()
  2139.  
  2140. #endif // IDirectPlay interface macros 
  2141.  
  2142. #ifdef __cplusplus
  2143. };
  2144. #endif
  2145.  
  2146. /* restore warning settings */
  2147. #if _MSC_VER >= 1200
  2148. #pragma warning(pop)
  2149. #else
  2150. #pragma warning(default:4201)
  2151. #endif
  2152.  
  2153. #endif
  2154.  
  2155.